传统题 1000ms 256MiB

凭钥问名

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

题目背景

软院 DUFLOJ\texttt{DUFLOJ} 每月都会举办一次编程月赛,获奖同学可以到线下领取相应奖品。

不过,平日里霸榜的往往是一群不愿透露姓名的“隐藏大佬”。为了保护获奖者的个人信息、防止他人冒领奖品,管理员设计了一套根据用户 ID\texttt{ID} 生成“领奖密钥”的机制,作为线下的领奖凭证。

然而百密一疏,在最近一次月赛结束后,小智不慎清空了这场比赛的数据。如今老师手中只剩下一批孤立的领奖密钥,根本无法查明它们究竟属于哪些获奖用户。

请你编写一个程序,根据这批仅存的领奖密钥,反向推测出它们可能对应的用户 ID\texttt{ID},帮助老师化解这场发奖危机。

题目描述

每位 OJ\texttt{OJ} 用户拥有一个 66 位的用户 ID\texttt{ID},记为 xx(100000≤x≤999999100000 \le x \le 999999)。系统按如下规则为获奖者生成领奖密钥 KK:

  1. 求 xx 的各位数字之和 SS;
  2. 计算 K=(x×S+S3) mod 1000000K = (x \times S + S^3) \bmod 1000000,不足 66 位则左侧补 00。

请你编写一个程序:对于给定的领奖密钥,求出能够生成该密钥的最小合法用户 ID\texttt{ID};如果不存在这样的用户 ID\texttt{ID},则输出 -1\texttt{-1}。


输入格式

第一行输入一个正整数 TT,表示需要查询的领奖密钥数量。

接下来输入 TT 行,每行一个 66 位数字字符串 KK,表示一个领奖密钥。

输出格式

共 TT 行。对于每个领奖密钥,输出一行结果:

若存在合法用户 ID\texttt{ID} 能生成该密钥,则输出其中最小的那个 ID\texttt{ID};否则输出 -1\texttt{-1}。


输入输出样例

3
100001
200028
222222
100000
100010
-1

样例解释:

  • 100001\texttt{100001}:当 x=100000x = 100000 时,xx 的各位数字之和 S=1S = 1,代入公式可得 (100000×1+13) mod 1000000=100001(100000 \times 1 + 1^3) \bmod 1000000 = 100001,因此输出 100000\texttt{100000}。

  • 200028\texttt{200028}:当 x=100010x = 100010 时,xx 的各位数字之和 S=2S = 2,代入公式可得 $(100010 \times 2 + 2^3) \bmod 1000000 = (200020 + 8) \bmod 1000000 = 200028$,因此输出 100010\texttt{100010}。

  • 222222\texttt{222222}:不存在任何合法用户 ID\texttt{ID} 能通过题目中的规则生成该密钥,因此输出 -1\texttt{-1}。


数据范围

  • 对于 20%20\% 的数据,保证 T≤10T \le 10。
  • 对于 50%50\% 的数据,保证 T≤103T \le 10^3。
  • 对于 100%100\% 的数据,保证 1≤T≤2×1051 \le T \le 2 \times 10^5。

大外软院第二届“智汇杯”计算机编程挑战赛

未参加
状态
已完成
规则
乐多
题目
10
开始于
2026-4-8 14:00
结束时间
2026-4-8 15:40
持续时间
1.7 小时
主持人
参赛人数
147