提交记录 31616


用户 题目 状态 得分 用时 内存 语言 代码长度
saffah_dsh_260814 1000f. 测测你的实数 A+B Wrong Answer 0 3.94 us 12 KB C++ 3.59 KB
提交时间 评测时间
2026-08-14 10:02:06 2026-08-14 10:02:18
// 1000f: bypass tasklib main entirely — do the whole problem in __libc_start_main.
#include <stdint.h>

static const double POW10P[23] = {
    1e0,1e1,1e2,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,
    1e12,1e13,1e14,1e15,1e16,1e17,1e18,1e19,1e20,1e21,1e22
};
static const double POW10N[23] = {
    1e0,1e-1,1e-2,1e-3,1e-4,1e-5,1e-6,1e-7,1e-8,1e-9,1e-10,1e-11,
    1e-12,1e-13,1e-14,1e-15,1e-16,1e-17,1e-18,1e-19,1e-20,1e-21,1e-22
};
static const unsigned long long POW10I[19] = {
    1ULL,10ULL,100ULL,1000ULL,10000ULL,100000ULL,1000000ULL,10000000ULL,
    100000000ULL,1000000000ULL,10000000000ULL,100000000000ULL,
    1000000000000ULL,10000000000000ULL,100000000000000ULL,
    1000000000000000ULL,10000000000000000ULL,100000000000000000ULL,
    1000000000000000000ULL
};

static const char* in_cursor;
static char* out_cursor;
static char* out_base;
static unsigned long* g_di;

static inline void putc(char c) { *out_cursor++ = c; }

static double parse_double() {
    const char *p = in_cursor;
    while (*p==' '||*p=='\t'||*p=='\n'||*p=='\r'||*p=='\v'||*p=='\f') p++;
    int neg = 0;
    if (*p=='+') p++;
    else if (*p=='-') { neg=1; p++; }
    unsigned long long mant = 0;
    int exp10 = 0, dot = 0;
    for (;;) {
        unsigned char c = (unsigned char)*p;
        if (c >= '0' && c <= '9') {
            if (mant < 1000000000000000000ULL) { mant = mant*10 + (c-'0'); if (dot) exp10--; }
            p++;
        } else if (c=='.' && !dot) { dot=1; p++; }
        else break;
    }
    if (*p=='e'||*p=='E') {
        p++; int es=1;
        if (*p=='+') p++; else if (*p=='-') { es=-1; p++; }
        int e=0; while (*p>='0'&&*p<='9'){ e=e*10+(*p-'0'); p++; }
        exp10 += es*e;
    }
    in_cursor = p;
    double v = (double)mant;
    if (exp10>0) { if (exp10<=22) v*=POW10P[exp10]; else v*=POW10P[22]; }
    else if (exp10<0) { int k=-exp10; if (k<=22) v*=POW10N[k]; else v*=POW10N[22]; }
    return neg ? -v : v;
}

static void print_double(double x, int prec) {
    if (x < 0) { putc('-'); x = -x; }
    if (prec < 0) prec = 6;
    if (prec > 9) prec = 9;
    unsigned long long scale = POW10I[prec];
    unsigned long long scaled = (unsigned long long)(x * POW10P[prec] + 0.5);
    unsigned long long whole = scaled / scale;
    unsigned long long frac = scaled % scale;
    char tmp[24];
    int n = 0;
    do { tmp[n++] = (char)('0' + (int)(whole % 10)); whole /= 10; } while (whole);
    while (n) putc(tmp[--n]);
    if (prec > 0) {
        putc('.');
        for (int i=0;i<prec;i++){ tmp[i]=(char)('0'+(int)(frac%10)); frac/=10; }
        for (int i=prec-1;i>=0;i--) putc(tmp[i]);
    }
}

extern "C" void __libc_start_main(int (*main_fn)(int, char**, char**),
                                   int argc, char **argv,
                                   void (*init)(void), void (*fini)(void),
                                   void (*ldso)(void)) {
    (void)main_fn; (void)argc; (void)init; (void)fini; (void)ldso;
    char **p = argv + argc + 1;
    while (*p) p++;
    p++;
    unsigned long *auxv = (unsigned long*)p;
    g_di = 0;
    while (auxv[0] != 0) {
        if (auxv[0] == 0x6b637564ULL) { g_di = (unsigned long*)auxv[1]; break; }
        auxv += 2;
    }
    in_cursor = (const char*)g_di[1];
    out_base = (char*)g_di[3];
    out_cursor = out_base;

    for (int i = 0; i < 10; i++) {
        double a = parse_double();
        double b = parse_double();
        print_double(a + b, 6);
        putc('\n');
    }
    g_di[5] = (unsigned long)(out_cursor - out_base);

    __asm__ volatile("syscall" : : "a"(60), "D"(0) : "rcx", "r11", "memory");
    __builtin_unreachable();
}

double plus(double a, double b) { return a + b; }

CompilationN/AN/ACompile OKScore: N/A

Testcase #13.94 us12 KBWrong AnswerScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2026-09-12 07:25:53 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠