计蒜客NOIP模拟赛5 D1T1 机智的 AmyZhi

时间:2023-03-09 00:19:42
计蒜客NOIP模拟赛5 D1T1 机智的 AmyZhi

那年一个雨季,AmyZhi 在校门外弯身买参考书。

这时 SiriusRen 走过来,一言不合甩给她一道“自认为”很难的题:

---------------

给你一个数字 NN(NN 的范围是 11 ~ 10000001000000),求一个最小的正整数 MM,这个数字 MM 的各个位的数字加上它本身之和恰好为NN。

---------------

没有想到 AmyZhi 秒解了这道题并把 NN 扩大到了 10^{18}10​18​​ 甩回给了 SiriusRen。

SiriusRen 苦苦思索,发现并不会这道题。

可怜 SiriusRen 一世英名,在 AmyZhi 面前却宛如智障少年。

SiriusRen 抬头透过倾斜的雨丝,看向模糊的世界,车水马龙,穿流不息,人来人往,形色匆匆,刹那间惘然,竟不知去向何方......

输入格式

第一行一个整数 TT,表示有 TT 组数据。

接下来 TT 行,每行一个整数 NN。

输出格式

对于每组数据,输出 MM。

若无解,输出一行Stupid SiriusRen

数据范围

对于 20\%20% 的数据:N \le 1000N≤1000,T \le 1000T≤1000;

对于 40\%40% 的数据:N\le 100000N≤100000,T \le 5T≤5;

对于 60\%60% 的数据:N \le 100000N≤100000,T \le 5000T≤5000;

对于 100\%100% 的数据:N\le 10^{18}N≤10​18​​,T \le 50000T≤50000。

忽略每行输出的末尾多余空格

样例输入

3
216
121
2005

样例输出

198
Stupid SiriusRen
1979
显然,选择的数x必须满足
n-9*18<=x<=n
那么只要在这个范围枚举x,在计算每一位的和,加起来
取一个最小的x
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long lol;
lol ans,n;
int main()
{lol i,T;
cin>>T;
while (T--)
{
cin>>n;
ans=-;
for (i=n;i>=max(n-,(lol));i--)
{
lol x=i,cnt=;
while (x)
{
cnt+=x%;
x/=;
}
if (i+cnt==n) ans=i;
}
if (ans==-)
printf("Stupid SiriusRen\n");
else printf("%lld\n",ans);
}
}