27 条题解
-
1
搬运工 (syrth0p1) LV 10 @ 2025-06-25 13:52:48
#include<iostream> #include<string> using namespace std; string s; int len=1,i; int sum2[105]={0}; int num[105]={0}; int ans=1; int a[8]={1,3,1,9,9,7,9,1}; int b[4]={2,4,8,6}; void print(int x[]){ int i=100; for(i=100;i>=0;i--) if(x[i]!=0) break; cout<<endl; while(i>=0) cout<<x[i--]; cout<<endl; } //return x==t bool Equal(int x[],int t){ for(int i=100;i>0;i--) if(x[i]!=0) return false; if(x[0]==t) return true; return false; } //z=y+t void add(int z[],int y[],int t){ for(int i=0;i<=100;++i) z[i]=y[i]; z[0]+=t; int i=0; while(z[i]>=10) { z[i+1]+=z[i]/10; z[i]%=10; i++; } return ; } //x=x-y void Sub(int x[],int y[]){ for(int i=0;i<=100;++i) { x[i]=x[i]-y[i]; if(x[i]<0) {x[i]+=10;x[i+1]-=1;} } return ; } //return (x-y-t)%m int SubAndMod(int x[],int y[],int t,int m){ Sub(x,y); x[0]-=t; int i=0; while(x[i]<0) { x[i]+=10; x[i+1]-=1; i++; } int tt=0; for(int i=100;i>=0;i--) { tt=tt*10; tt=(tt+x[i])%m; } return tt; } //y=x/k void Divide(int y[],int x[],int k){ int t=0; for(int i=100;i>=0;i--) { y[i]=(t+x[i])/k; t=(t+x[i])%k; t*=10; } } //g(x)=1*3*5*7*9....*(2*x-1) int g(int x[]){ if(Equal(x,1)) return a[0]; if(Equal(x,2)) return a[1]; int y[105]={0},z[105]={0}; add(y,x,2); //y=x+2 Divide(z,y,5); //z=y/5 z为5的指数 Sub(sum2,z); //2的指数减去5的指数 int t=SubAndMod(x,z,1,8); //t=(x-(x+2)/5-1)%8 return (g(z)*a[t])%10; } //y=y+x void Sum(int y[],int x[]){ for(int i=0;i<=100;++i) { y[i]=y[i]+x[i]; y[i+1]+=y[i]/10; y[i]%=10; } } //f(x)=x! int f(int x[]){ if(Equal(x,1)) return 1; int y[105]={0}; Divide(y,x,2); //y=x/2 Sum(sum2,y); //加上2的指数 if(x[0]%2==0) return (f(y)*g(y))%10; int z[105]={0}; add(z,y,1); return (f(y)*g(z))%10; } int main() { cin>>s; for(len=1;len<=s.size();len++) if(s.size()%len==0) { for(i=0;i<s.size();++i) if(s[i%len]!=s[i]) break; if(i>=s.size()) break; } for(i=0;i<len;++i) num[i]=s[len-i-1]-'0'; ans=f(num); int z[105]={0}; if(!Equal(sum2,0)) ans=ans*b[SubAndMod(sum2,z,1,4)]; ans%=10; cout<<ans<<endl; }
-
02009-10-11 16:28:13@
我倒。硬着头皮交了N次的216.。。
数组开小了O.O
-
02009-10-11 16:09:15@
神了.....
我交了1遍,通过人数中我出现了2次....... -
02009-09-13 19:57:17@
Orz楼下神牛,我传了8遍,结果高精度数组没清零
-
02009-09-13 17:37:19@
3遍AC……
-
02009-08-12 21:58:22@
大牛门用的都什么方法啊?
我的方法只要那最小周期串长度>10就挂了
=10也很危险 -
02009-07-18 21:28:42@
周期可以是不完全的吗?
比如说"12112"的最小可以看成是"121"吗? -
02009-07-13 09:31:29@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
├ 测试数据 11:答案正确... 0ms
├ 测试数据 12:答案正确... 0ms
├ 测试数据 13:答案正确... 0ms
├ 测试数据 14:答案正确... 0ms
├ 测试数据 15:答案正确... 0ms
├ 测试数据 16:答案正确... 0ms
├ 测试数据 17:答案正确... 0ms
├ 测试数据 18:答案正确... 0ms
├ 测试数据 19:答案正确... 0ms
├ 测试数据 20:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms就因为把>=打成=WA了2次......
公式f(n)=f([n/5])*4^([n/10] mod 2)*f(n mod 10) mod 10 -
02009-05-18 19:53:39@
这里的最小周期串是什么意思?131113111能不能把13111看成最小周期串?
-
02009-03-16 16:47:27@
最小周期串一直求错!!
-
02009-03-02 09:07:27@
program kk;
var ss,s:string;
n,l,i,j:integer;
ji:longint;
a:array[1..1000] of char;
begin
read(ss);
l:=length(ss);
for i:=1 to l do
for j:=1 to l-i do
if ss[1+j]=ss then
begin
n:=ord(ss)-ord('0');
break;
end;
ji:=1;
for i:=1 to n do
begin
ji:=ji*i;
while ji mod 10=0 do ji:=ji div 10;
if ji mod 100 then ji:=ji mod 10;
end;
str(ji,s);
l:=length(s);
for i:=1 to l do
a[i]:=s[i];
for i:=l downto 1 do
if a[i]'0' then
begin
writeln(a[i]);
exit;
end;
end. -
02009-02-16 14:13:29@
这题很难么?
-
02009-02-15 14:34:35@
谁把第一个点的数据给我一下,死活不对。
-
02009-02-14 21:49:28@
这解题报告很好很强大
-
02009-02-14 10:30:25@
楼下的解题报告很精辟。
-
02009-02-07 18:58:58@
VIJOS P1505 信息学老师的失误解题报告 http://plfxy.blog.hexun.com/29038074_d.html
-
02009-02-05 15:19:48@
郁闷 哪里出错都不知道..
好想要数据啊.. -
02009-02-05 14:42:45@
我是时代中学,支持时代!!!
-
02009-02-05 12:41:54@
..我汗..麻烦..
-
02009-02-05 11:19:13@
神奇的curimit大牛竟然用一句地核.将他原来长达500余的精彩题解覆盖了!!
没他的题解想过此题恐怕有点难度..