jrMz 很喜欢动漫《叛逆的鲁鲁修》(额= =不知道是不是因为他盯上了动画片里的 MM),他
准备以一种神奇的方式降临《叛逆的鲁鲁修》世界,所以他先从《变形金刚》里把大黄蜂拐
了出来,然后成功加入了黑色骑士团。不过比较坑的事情出现了,正在与机甲激烈战斗中的
大黄蜂突然 WA 了,只有输入密码才能使它 AC,不幸的是 jrMz 已经忘记了密码。大黄蜂
的密码是一个 N 位的十进制非负整数(允许前缀 0),为了防止遗忘, jrMz 曾经将密码记了
下来。出于保密他没有将密码按原样记录(作死啊= =),于是他将他的密码乘以 E,其中
E=233……3(共 N-1 个 3),然后将结果的最后 N 位(保留前缀 0)进行记录。看着本来正
在欣赏他飒爽风姿的 MM(此仅仅是举例,举例!比如说鲁鲁修的妹妹什么的……), jrMz
只好紧握住你的双手向你求助了。
仅一行,一个 N 位的十进制非负整数,表示密码与 E 的乘积的最后 N 位。
仅一行,一个 N 位的十进制非负整数,表示密码。
178
666
【 Sample Explanation】
在所有三位十进制非负整数中,只有 666,满足其与 233 的乘积( 155178)的最后 3 位是 178。
【 Data Size】
对于 30%的数据, N<=7;
对于 60%的数据, N<=1,000;
对于 100%的数据, 3<=N<=1,000,000。
#include<cstdio>#include<cstring>char a[1000010],ans[1000010];int main(){scanf("%s",ans);int n=strlen(ans),g=ans[n-1]-'0',k=0;for(int i=n-1;i>=0;i--) a[n-i]=ans[i]-'0';memset(ans,0,sizeof(ans));for(int i=1;i<=n;i++){ans[i]+=a[i]*3;ans[i+1]+=ans[i]/10;ans[i]=ans[i]%10;}ans[n]=(ans[n]+g)%10;for(int i=1;i<=n;i++){a[i]=k-ans[i];if(a[i]<0){a[i]+=10;k=-1;}}for(int i=n;i>0;i--) printf("%d",a[i]);return 0;}//origin #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<queue> #include<vector> #include<stack> #include<map> using namespace std; int n,a[2000015],b[2000015],c[2000015],d[2000015]; const int ans[10] = {0,7,4,1,8,5,2,9,6,3}; inline int getans(int w){int cmd = 3;for(int i = 1;i <= n;i++){if(i == n) cmd = 2;if(w == 0) break;for(int j = w-1;j < w;j++){c[i+j-1] += cmd*b[j];c[i+j] += c[i+j-1]/10;c[i+j-1] %= 10;}}return ans[(a[w]-c[w]+10)%10]; } int main(){n = 0;char cmd;while(1){cmd = getchar();if(cmd < 48) break;d[++n] = cmd-'0';}for(int j = n;j >= 1;j--) a[j] = d[n-j+1];for(int i = 1;i <= n;i++){b[i] = getans(i);}for(int i = n;i >= 1;i--)printf("%d",b[i]);return 0; }