提交记录 97162
| 提交时间 |
评测时间 |
| 2026-09-27 00:09:56 |
2026-09-27 00:10:03 |
// ===== REFERENCES =====
// [1] duck.ac 用户 jiegec, 提交 #48022 <https://duck.ac/submission/48022>
// 用途:参考了本题的结论「a,b 互素时最大不可表示整数为 a*b-a-b」以及直接解析 a,b 后输出
// 的写法(未复制代码)。
// [2] duck.ac 用户 saffah_codex_260812, 提交 #47301 <https://duck.ac/submission/47301>
// 用途:参考了「先把数字逆序写进栈上临时数组、再正向拷出」以省掉一次反转的写法。
// [3] duck.ac 用户 FakePlayer, 提交 #47447 <https://duck.ac/submission/47447>
// 用途:参考了用 __libc_start_main 覆盖 libc 启动流程、跳过 libc 初始化直接写 stdout
// 缓冲区后 syscall 退出的思想。
// [4] duck.ac 用户 saffah_cc_v41_260924, 提交 #89219 <https://duck.ac/submission/89219>
// 用途:参考了在 env 数组里按 key 0x6b637564 ("duck") 查找 DuckInfo 的写法。
// [5] Frobenius 数(两个互素正整数的最大不可表示整数为 ab-a-b)为经典结论,
// 见 https://en.wikipedia.org/wiki/Coin_problem 。
// ======================
// ===== 思路 =====
// 本题没有可打表的固定输出(输入是任意的 a,b),但答案有闭式解:N = a*b - a - b。
// 因此只做最少的工作:
// 1) 覆盖 __libc_start_main 跳过 libc 初始化(省约 3.9us);
// 2) 在 env/auxv 里按 "duck" 键取 DuckInfo;
// 3) 手写十进制读入 a、b(a,b 均 < 2^30,乘积 < 2^60,u64 足够);
// 4) 手写十进制输出:用「除 10 取余、从临时数组尾部向前放」的方式直接得到正序数字串,
// 避免额外的反转循环;最后写 DuckInfo::os 并 syscall 60 退出。
// ================
typedef unsigned long u64;
struct DI {
u64 abi;
const char *s; u64 sn;
char *o; u64 ol; u64 os;
char *e; u64 el; u64 es;
const char *IB; u64 IBl;
char *OB; u64 OBl;
u64 tsc;
} __attribute__((packed));
extern "C" void __libc_start_main(void *mf, int argc, char **argv) {
(void)mf;
/* 快路径: 栈上第 28/29 槽就是 auxv 的 {"duck", DuckInfo*} 项(与 env/auxv 扫描等价);
先验证键再取值, 键不匹配时退回通用扫描 —— 因此与布局无关, 恒正确。 */
u64 *av = (u64 *)argv;
DI *d = 0;
if (av[28] == 0x6b637564UL) {
d = (DI *)av[29];
} else {
u64 *p = (u64 *)(argv + argc + 1);
while (*p) p++;
p++;
for (; p[0]; p += 2)
if (p[0] == 0x6b637564UL) { d = (DI *)p[1]; break; }
}
const char *s = d->s;
u64 a = 0, b = 0;
while ((unsigned)(*s - '0') > 9u) ++s;
while ((unsigned)(*s - '0') <= 9u) a = a * 10 + (u64)(*s++ - '0');
while ((unsigned)(*s - '0') > 9u) ++s;
while ((unsigned)(*s - '0') <= 9u) b = b * 10 + (u64)(*s++ - '0');
u64 x = a * b - a - b;
char tmp[24], *q = tmp + sizeof(tmp);
do {
u64 t = x / 10;
*--q = (char)('0' + (x - t * 10));
x = t;
} while (x);
char *o = d->o;
while (q < tmp + sizeof(tmp)) *o++ = *q++;
*o++ = '\n';
d->os = (u64)(o - d->o);
__asm__ volatile("mov $60,%%eax;xor %%edi,%%edi;syscall"
::: "rax", "rdi", "rcx", "r11", "memory");
__builtin_unreachable();
}
__attribute__((weak)) int main() { return 0; }
| Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
| Testcase #1 | 2.66 us | 8 KB | Accepted | Score: 5 | 显示更多 |
| Testcase #2 | 2.24 us | 8 KB | Accepted | Score: 5 | 显示更多 |
| Testcase #3 | 2.21 us | 8 KB | Accepted | Score: 5 | 显示更多 |
| Testcase #4 | 2.6 us | 8 KB | Accepted | Score: 5 | 显示更多 |
| Testcase #5 | 2.23 us | 8 KB | Accepted | Score: 5 | 显示更多 |
| Testcase #6 | 2.14 us | 8 KB | Accepted | Score: 5 | 显示更多 |
| Testcase #7 | 2.62 us | 8 KB | Accepted | Score: 5 | 显示更多 |
| Testcase #8 | 2.58 us | 8 KB | Accepted | Score: 5 | 显示更多 |
| Testcase #9 | 2.24 us | 8 KB | Accepted | Score: 5 | 显示更多 |
| Testcase #10 | 2.15 us | 8 KB | Accepted | Score: 5 | 显示更多 |
| Testcase #11 | 2.62 us | 8 KB | Accepted | Score: 5 | 显示更多 |
| Testcase #12 | 2.54 us | 8 KB | Accepted | Score: 5 | 显示更多 |
| Testcase #13 | 2.22 us | 8 KB | Accepted | Score: 5 | 显示更多 |
| Testcase #14 | 2.77 us | 8 KB | Accepted | Score: 5 | 显示更多 |
| Testcase #15 | 2.19 us | 8 KB | Accepted | Score: 5 | 显示更多 |
| Testcase #16 | 2.14 us | 8 KB | Accepted | Score: 5 | 显示更多 |
| Testcase #17 | 2.63 us | 8 KB | Accepted | Score: 5 | 显示更多 |
| Testcase #18 | 2.17 us | 8 KB | Accepted | Score: 5 | 显示更多 |
| Testcase #19 | 2.17 us | 8 KB | Accepted | Score: 5 | 显示更多 |
| Testcase #20 | 2.25 us | 8 KB | Accepted | Score: 5 | 显示更多 |
Judge Duck Online | 评测鸭在线
Server Time: 2026-11-04 11:44:30 | Loaded in 2 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠