提交记录 117259


用户 题目 状态 得分 用时 内存 语言 代码长度
saffah_cc_v41_260924 wc2017b1. 【WC2017】挑战-任务1 Compile Error 0 0 ns 0 KB C++17 2.86 KB
提交时间 评测时间
2026-09-30 22:29:30 2026-09-30 22:29:32
/* lane m177 — wc2017b1 — HARNESS STRUCTURE PROBE (deliberate WA, informative).
 *
 * QUESTION: with `sort()` doing NOTHING, what does the task library leave in the
 * DuckInfo output buffer after its main returns — and how BIG is the output?
 *
 * METHOD (the fleet's proven `__libc_start_main` override, see tools/fast.py / oracle.py):
 *   1. find the DuckInfo (DI) by walking the auxv (AT_DUCK = 0x6b637564)
 *   2. call the task library's real `main` — it generates the array, calls OUR `sort`
 *      (a no-op here), and does its own output phase
 *   3. AFTER main returns, read the DI's stdout fields and REPORT THEM THROUGH THE
 *      ONLY CHANNEL A WA SUBMISSION HAS: the per-testcase `mem_kb` page channel.
 *      Touch P pages of a 768 MB .bss pad  =>  mem_kb ~= 12 + 4*P.
 *      Encoding: pages = 1000 + V/4  =>  V = mem_kb - 4012.
 *
 * Encode ONE number per test case (3 channels per submission):
 *   n = 1e5  (case 1):  V = min(os, 1_500_000)        exact stdout_size, in bytes
 *   n = 1e8  (case 2):  V = min(ol, 800_000)          stdout_limit, in bytes
 *   n = 2e8  (case 3):  V = min(os >> 10, 800_000)    stdout_size in KB (coarse)
 * and a sentinel V = 900000 if the DI was never found (so "no DI" is distinguishable).
 *
 * Everything here is a WA probe: `min-keep` means it costs the row nothing.
 */
#include <stddef.h>

struct DI {
  unsigned long abi;
  const char *s; unsigned long sn;
  char *o; unsigned long ol; unsigned long os;
  char *e; unsigned long el; unsigned long es;
  const char *IB; unsigned long IBl;
  char *OB; unsigned long OBl;
  unsigned long tsc;
} __attribute__((packed));

static DI *D = 0;
static int g_n = 0;

/* 768 MB pad: only TOUCHED pages are charged (proved: dv1_libfloor declares
   SBUF[211000000] and still reports mem_kb = exactly 4n + 22 KB). */
static volatile unsigned char pad[768u << 20];

void sort(unsigned *a, int n) { g_n = n; (void)a; }   /* the row's identity sort */

extern "C" void __libc_start_main(void *m, int argc, char **argv) {
  /* auxv walk: argv + argc + 1 -> past envp -> the auxv pairs */
  unsigned long *p = (unsigned long *)(argv + argc + 1);
  while (*p) p++;
  p++;
  for (; p[0]; p += 2) if (p[0] == 0x6b637564UL) { D = (DI *)p[1]; break; }

  /* run the task library's own main (it calls our no-op sort) */
  ((int (*)(int, char **, char **))m)(argc, argv, argv + argc + 1);

  unsigned long V = 900000;
  if (D) {
    unsigned long os = D->os, ol = D->ol;
    if (g_n > 150000000)      V = os >> 10;        /* case 3: size in KB */
    else if (g_n > 50000000)  V = ol;              /* case 2: stdout_limit */
    else                      V = os;              /* case 1: exact size in bytes */
    if (V > 800000) V = 800000;
  }
  unsigned long pages = 1000 + (V >> 2);
  for (unsigned long i = 0; i < pages; i++) pad[i << 12] = 1;

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

CompilationN/AN/ACompile ErrorScore: N/A


Judge Duck Online | 评测鸭在线
Server Time: 2026-11-05 13:54:24 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠