vijos_1024
卡布列克圆舞曲-31min-模拟
Hint
1、输入数是否占用循环节第一位并未交代清楚,最后一个数据有此问题
2、输出时ans[ans[0]-1]误写成ans[ans[0]]-1
3、输入数不超过maxlongint但改变顺序后会超过,应用int64
4、评测机内存限制,无法开过大数组记录循环节,事实上25位足够
5、str(int,string)
?Download vijos_1024.pas
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | var n0,n,n1,n2:int64; i,j,ok:longint; f:boolean; s1,s2,s:string; ans:array[0..25] of int64; l:array[0..10] of longint; begin while not eoln do begin readln(n); n0:=n; fillchar(ans,sizeof(ans),0); f:=false; while f=false do begin str(n,s1); fillchar(l,sizeof(l),0); for i:=1 to length(s1) do begin val(s1[i],l[10],ok); inc(l[l[10]]); end; s1:=''; for i:=0 to 9 do for j:=1 to l[i] do begin str(i,s); s1:=s1+s; end; s2:=''; for i:=length(s1) downto 1 do s2:=s2+s1[i]; val(s1,n1,ok); val(s2,n2,ok); n:=abs(n1-n2); inc(ans[0]); ans[ans[0]]:=n; for j:=1 to ans[0]-1 do if (ans[j]=n) and (ans[0]-1<>0) then begin f:=true; break; end; end; dec(ans[0]); { for i:=j to ans[0]-2 do write(ans[i],' '); write(ans[ans[0]-1]);} if ans[ans[0]]=n0 then begin if ans[0]=2 then write(n0) else begin write(n0,' '); for i:=j to ans[0]-2 do write(ans[i],' '); write(ans[ans[0]-1]); end; end else begin for i:=j to ans[0]-1 do write(ans[i],' '); write(ans[ans[0]]) end; writeln; end; end. |
编译通过…
├ 测试数据 01:答案正确… 0ms
├ 测试数据 02:答案正确… 0ms
├ 测试数据 03:答案正确… 0ms
├ 测试数据 04:答案正确… 0ms
├ 测试数据 05:答案正确… 0ms
├ 测试数据 06:答案正确… 0ms
├ 测试数据 07:答案正确… 0ms
├ 测试数据 08:答案正确… 0ms
├ 测试数据 09:答案正确… 0ms
├ 测试数据 10:答案正确… 0ms
————————-
Accepted 有效得分:100 有效耗时:0ms
31min…..雾..
评测机内存限制,无法开过大数组记录循环节,事实上25位足够…. 雾…开大点好..
var
s : array[0..100000]of qword;
@Wandsea 谁知道到评测机开多少内存出来
@moradin
NOIp50MB……考卷上有的..
@Wandsea 我的眼睛瞎掉了