92 条题解
-
0song19931218 LV 9 @ 2009-10-09 20:42:34
第一次写这种高精度,写了81行。。。。。。秒杀
-
02009-10-06 13:35:18@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msvar
s,ss,n,m:string;
a,b,t:array[1..101] of integer;
i,j,g,len:integer;
f:boolean;
procedure print;
begin
fillchar(t,sizeof(t),0);
if b[len]0 then len:=len+1; g:=0;
for i:=1 to len do begin
if a[i]>=b[i]+g then begin
t[i]:=a[i]-b[i]-g;
g:=0;
end else begin
t[i]:=a[i]+10-b[i]-g;
g:=1;
end;
end;
if t[len+1]0 then len:=len+1;
fillchar(b,sizeof(b),0);
for i:=1 to len do begin
j:=t[i]*2;
b[i]:=b[i]+j mod 10;
b:=b+j div 10;
end;
if b[len+1]0 then len:=len+1;
fillchar(a,sizeof(a),0);
fillchar(t,sizeof(t),0); t[1]:=1;
for i:=1 to len do begin
j:=b[i]+t[i];
a[i]:=a[i]+j mod 10;
a:=j div 10;
end;
for j:=len downto 1 do begin
str(a[j],m);
n:=n+m;
end;
for j:=len downto 1 do if a[j]0 then break;
delete(n,1,len-j);
writeln(n);
end;
procedure gjd;
begin
for i:=1 to len do b[i]:=t[i];
fillchar(t,sizeof(t),0);
for i:=1 to len do begin
j:=b[i]*2;
t[i]:=t[i]+j mod 10;
t:=t+j div 10;
end;
if t[len+1]0 then len:=len+1;
if lenlength(s) then f:=true;
if len=length(s) then begin
fillchar(ss,sizeof(s),0);
for i:=len downto 1 do begin
str(t[i],m);
ss:=ss+m;
end;
if ss>s then f:=true;
if ss -
02009-09-23 07:15:17@
if i mod 2=0 then
a[i]:=2*a[i div 2]-1
else a[i]:=2*a[i div 2]+1;
a[1]:=1;
这样写对吗??(高精另算) -
02009-09-16 22:12:37@
-
02009-09-05 19:29:28@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms我囧 高精度尽然交了4次 Orz
-
02009-08-30 22:12:52@
90多行是不至于啦。。我写了88行。。20分钟1遍AC的高精乘低精。。没什么难度的题。。
约瑟夫问题有一个很快捷的方法:把读入的n转为2进制,然后把首位的1移到末尾就是答案了。。至于为什么。。大家好好想想吧。。
晒晒程序:
type hp=array[0..50] of int64;
const m=10000;
var a,b,c:hp;
function compare(a,b:hp):boolean;
var i:longint;
begin
if a[0]>b[0] then exit(true) else
if a[0]b[i] then exit(true) else
if a[i]4 do
begin
inc(a[0]);
val(copy(s,length(s)-3,4),a[a[0]],c);
delete(s,length(s)-3,4);
end;
inc(a[0]);
val(s,a[a[0]],c);
end;
procedure clear(var a:hp);
var i:longint;
begin
for i:=1 to a[0] do
begin
inc(a,a[i] div m);
a[i]:=a[i] mod m;
end;
while (a[a[0]]=0)and(a[0]>1) do dec(a[0]);
end;
procedure mul(var a:hp);
var i:longint;
begin
for i:=1 to a[0] do
a[i]:=a[i] shl 1;
inc(a[0]);
clear(a);
end;
procedure prework;
var i:longint;
begin
c[0]:=1; c[1]:=1;
while compare(a,c) do
begin
b:=c;
mul(c);
end;
end;
procedure print(a:hp);
var i:longint;
begin
write(a[a[0]]);
for i:=a[0]-1 downto 1 do
begin
if a[i] -
02009-08-22 15:44:36@
话说怎么都那么长的程序?
我才99行……还敲了至少5行的多余回车……
无语……代码短小也是一种品德!
{——————————————————————}编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms -
02009-08-21 17:55:11@
注意细节,注意变量名!
AC率啊 -
02009-08-14 14:29:31@
program express(input,output);
var
a1:array[1..1000] of ansistring;
b1:array[1..1000] of char;
o,l,e,i,j,k,p,m,n,w,s,x,z,c,v:longint;
st,st1,st2:ansistring;
function max(a,b:longint):longint;
begin
if a>b then max:=a else max:=b;
end;
function add(st1,st2:ansistring):ansistring;
var
st3:ansistring;
a,b:array[0..10000] of longint;
i,j,k,l,c,d,e,w,q,s,len:longint;
begin
add:='';
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(b),0);
a[0]:=length(st1);
b[0]:=length(st2);
if a[0] mod 4=0 then
a[0]:=a[0] div 4
else
a[0]:=a[0] div 4+1;
if b[0] mod 4=0 then
b[0]:=b[0] div 4
else
b[0]:=b[0] div 4+1;
for i:=1 to a[0]-1 do
val(copy(st1,length(st1)-i*4+1,4),a[i]);
val(copy(st1,1,length(st1)-(a[0]-1)*4),a[a[0]]);
for i:=1 to b[0]-1 do
val(copy(st2,length(st2)-i*4+1,4),b[i]);
val(copy(st2,1,length(st2)-(b[0]-1)*4),b[b[0]]);
len:=max(a[0],b[0]);
for i:=1 to len do
begin
a[i]:=a[i]+b[i];
a:=a+a[i] div 10000;
a[i]:=a[i] mod 10000;
end;
if a[len+1]>0 then inc(len);
str(a[len],st3);
add:=add+st3;
for i:=len-1 downto 1 do
begin
str(a[i],st3);
if a[i]1) and (c[len]=0) do
len:=len-1;
str(c[len],st3);
mul:=mul+st3;
for i:=len-1 downto 1 do
begin
str(c[i],st3);
if c[i] -
02009-08-13 12:55:49@
提交第2000次纪念一下
Flag
题号 P1095
类型(?) 数论 / 数值
通过 538人
提交 1999次
通过率 27%
难度 2Flag Accepted
题号 P1095
类型(?) 数论 / 数值
通过 539人
提交 2000次
通过率 27%
难度 2Accepted 有效得分:100 有效耗时:0ms
-
02009-07-27 11:19:23@
var
shu1,shu,shu2,cha:array [1..1000] of longint;
g2,i,j,a,b,c,l,x,y,lz:longint;
k:char;
function geshu(c:longint):longint;
var
yu,o:longint;
begin
l:=lz; o:=0; geshu:=0;
repeat
if o=1 then begin l:=l-1; o:=0; end;
a:=lz-l; yu:=0;
repeat
a:=a+1;
yu:=yu+shu[a];
if yu=10
then
begin
if x=l then l:=l+1;
shu1[x+1]:=shu1[x+1]+shu1[x] div 10;
shu1[x]:=shu1[x] mod 10;
end;
until x=l;
end;
begin
i:=0;
while not eoln do
begin
i:=i+1;
read(k);
shu[i]:=ord(k)-48;
end;
lz:=i;
j:=0;
for i:=lz downto 1 do
begin
j:=j+1;
shu2[j]:=shu[i];
end;
g2:=geshu(1);
shu1[1]:=1;
l:=1;
if g2>=10
then
for i:=1 to (g2 div 11) do
begin
j:=0;
repeat
j:=j+1;
shu1[j]:=shu1[j]*2048;
until j=l;
jingwei;
end;
for i:=1 to (g2 mod 11
) do
begin
j:=0;
repeat
j:=j+1;
shu1[j]:=shu1[j]*2;
until j=l;
jingwei;
end;
for j:=1 to lz do
cha[j]:=shu2[j]-shu1[j];
x:=0;
repeat
x:=x+1;
if cha[x]=10
then
begin
if j=y then y:=y+1;
cha[j+1]:=cha[j+1]+cha[j] div 10;
cha[j]:=cha[j] mod 10;
end;
until j=y;
for i:=y downto 1 do
write(cha[i]);
end. -
02009-07-24 14:24:03@
97行,猥琐啊
交了两次
第一次写了一个B:=X
其实应该是B:=B+X;
program p1095;
var n,j:string;
i,k,l,l1,b,m,s:integer;
a:array[0..333] of string;
function mul(s1,s2:string):string;
var l,i,x,k:integer;
a,b:array[1..101] of integer;
s:string;
begin
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(b),0);
l:=length(s2);
for i:=1 to l do a[l-i+1]:=ord(s2[i])-48;
for i:=1 to l do
begin
x:=a[i]*2;
if x>=10 then
begin
b[i]:=b[i]+x mod 10;
b:=b+x div 10;
end else b[i]:=b[i]+x;
end;
if b[l+1]0 then k:=l+1 else k:=l;
mul:='';
for i:=k downto 1 do
begin
str(b[i],s);
mul:=mul+s;
end;
end;
function jian(s1,s2:string):string;
var l1,l2,i:integer;
a,b,c:array[1..101] of integer;
s:string;
begin
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(b),0);
fillchar(c,sizeof(c),0);
l1:=length(s1);l2:=length(s2);
for i:=1 to l1 do a[l1-i+1]:=ord(s1[i])-48;
for i:=1 to l2 do b[l2-i+1]:=ord(s2[i])-48;
for i:=1 to l1 do
begin
c[i]:=c[i]+a[i]-b[i];
if c[i]l1 then
begin
k:=i-1;
j:=jian(n,a[k]);
j:=mul('2',j);
l:=length(j);
for m:=1 to l-1 do write(j[m]);
val(j[l],s);
write(s+1);
exit;
end else
if l=l1 then
for b:=1 to l do
if n>a then break
else if n -
02009-07-13 18:22:27@
其实。。。不用压位阿。。。(压位会头大的。。。)
Num为原数
Now初始为1
Repeat
Temp=Num-Now;
判断temp和now 如果temp -
02009-06-06 20:25:05@
为什么要用高精?
-
02009-04-26 21:07:20@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
program zk;
var
shu1,shu,shu2,cha:array [1..1000] of longint;
g2,i,j,a,b,c,l,x,y,lz:longint;
k:char;
function geshu(c:longint):longint;
var
yu,o:longint;
begin
l:=lz; o:=0; geshu:=0;
repeat
if o=1 then begin l:=l-1; o:=0; end;
a:=lz-l; yu:=0;
repeat
a:=a+1;
yu:=yu+shu[a];
if yu=10
then
begin
if x=l then l:=l+1;
shu1[x+1]:=shu1[x+1]+shu1[x] div 10;
shu1[x]:=shu1[x] mod 10;
end;
until x=l;
end;
begin
i:=0;
while not eoln do
begin
i:=i+1;
read(k);
shu[i]:=ord(k)-48;
end;
lz:=i;
j:=0;
for i:=lz downto 1 do
begin
j:=j+1;
shu2[j]:=shu[i];
end;
g2:=geshu(1);
shu1[1]:=1;
l:=1;
if g2>=10
then
for i:=1 to (g2 div 11) do
begin
j:=0;
repeat
j:=j+1;
shu1[j]:=shu1[j]*2048;
until j=l;
jingwei;
end;
for i:=1 to (g2 mod 11
) do
begin
j:=0;
repeat
j:=j+1;
shu1[j]:=shu1[j]*2;
until j=l;
jingwei;
end;
for j:=1 to lz do
cha[j]:=shu2[j]-shu1[j];
x:=0;
repeat
x:=x+1;
if cha[x]=10
then
begin
if j=y then y:=y+1;
cha[j+1]:=cha[j+1]+cha[j] div 10;
cha[j]:=cha[j] mod 10;
end;
until j=y;
for i:=y downto 1 do
write(cha[i]);
end.方法【====================================================】
首先挂一个1---|300 的表
找规律
发现
2的n次方 都是第1个出去
2的n次方+1 都是第3个出去
2的n次方+x 都是第1+2*x个出去
再用高精度
注意要压位规律如下
1-02-1
3-34-1
5-3
6-5
7-72^n---|--1
2^n+1---|--3
2^n+x---|---|1+2*x数组读入n
找到小于n 的最大 2的某次方
n 减 2的某次方
差乘2+1 为答案
要用高精度 -
02009-03-10 17:34:08@
有个东西叫链表
-
02009-02-06 13:29:40@
丢脸。。。竟然将100位数看成是100以内的数。。。可以去死了
-
02008-12-31 16:34:21@
编译通过...├ 测试数据 01:答案正确... 0ms├ 测试数据 02:答案正确... 0ms├ 测试数据 03:答案正确... 0ms├ 测试数据 04:答案正确... 0ms├ 测试数据 05:答案正确... 0ms├ 测试数据 06:答案正确... 0ms├ 测试数据 07:答案正确... 0ms├ 测试数据 08:答案正确... 0ms├ 测试数据 09:答案正确... 0ms├ 测试数据 10:答案正确... 0ms-------------------------Accepted 有效得分:100 有效耗时:0ms数据很弱
-
02008-12-22 20:57:01@
编译通过...
-
02008-11-07 09:13:21@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
编1小时,汗,高精度搞半天,郁闷