70 条题解
-
0Jungle LV 10 @ 2009-08-15 21:29:49
编译通过...
├ 测试数据 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-05 16:37:49@
9 30000这个点我的程序在我家的机子上足足跑了4秒,可是……
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
是Vijos评测器太牛X还是数据太弱? -
02009-08-03 18:09:39@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 103ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:103ms高精+递推 恩...注意下最高位的情况就好了 米有秒杀 惭愧...
{main} {高精就不打了哈...}
begin
readln(k,w);
k2:=1;
for i:=1 to k do k2:=k2*2;
pp:=w mod k;{zui gao wei}
qq:=w div k;{zui shao wei shu}
case pp of
0:r:=0;
1:r:=1;
2:r:=3;
3:r:=7;
4:r:=15;
5:r:=31;
6:r:=63;
7:r:=127;
8:r:=255;
end;{zui gao wei zui da shu}
for i:=1 to k2 do begin f[1,i][0]:=1;f[1,i][1]:=1;end;
for i:=2 to qq do
for j:=k2-2 downto 1 do
begin
add(f,f);{add是把后者加到前者里}
add(f,f);
add(ans,f);
end;
if pp0 then begin
for j:=k2-2 downto 1 do
begin
add(f[qq+1,j],f[qq,j+1]);
add(f[qq+1,j],f[qq+1,j+1]);
end;
for j:=r downto 1 do
add(ans,f[qq+1,j]);
end;
{print}
for i:=ans[0] downto 1 do
write(ans[i]);
writeln;
end. -
02009-07-28 11:31:43@
type
arr =array[0..40]of longint;
var
k,w,s,p,i,q :longint;
tot :arr;
function he(x,y:arr):arr;
var
z:arr;
q,jin,i :longint;
begin
if x[0]>y[0] then
begin
q:=y[0];
z:=x;
end
else
begin
q:=x[0];
z:=y;
end;
jin:=0;
for i:=1 to q do
begin
z[i]:=x[i]+y[i]+jin;
jin:=z[i] div 1000000;
z[i]:=z[i]mod 1000000;
end;
if jin>0 then
begin
for i:=q+1 to z[0] do
begin
z[i]:=z[i]+jin;
jin:=z[i]div 1000000;
if jin=0 then break;
end;
if jin>0 then
begin
inc(z[0]);
z[z[0]]:=jin;
end;
end;
exit(z);
end;
function shang(q:arr;k:longint):arr;
var
jin,i :longint;
z :arr;
begin
jin:=0;
for i:=q[0] downto 1 do
begin
z[i]:=jin*1000000+q[i];
jin:=z[i] mod k;
z[i]:=z[i]div k;
end;
for i:=q[0] downto 1 do
if z[i]>0 then
begin
z[0]:=i;
break;
end;
exit(z);
end;
function ji(x:arr;k:longint):arr;
var
jin,i :longint;
z :arr;
begin
jin:=0;
z[0]:=x[0];
for i:=1 to x[0] do
begin
z[i]:=x[i]*k+jin;
jin:=z[i]div 1000000;
z[i]:=z[i]mod 1000000;
end;
if jin>0 then
begin
inc(z[0]);
z[z[0]]:=jin;
end;
exit(z);
end;
procedure print(x:arr);
var
i :longint;
st :string;
begin
write(x[x[0]]);
for i:=x[0]-1 downto 1 do
begin
str(x[i],st);
while length(st)1 shl k then q:=1 shl k-s-1 else q:=1 shl p-1;
for i:=q downto 1 do
tot:=he(tot,c(s,1 shl k-1-i));
for i:=s downto 2 do
tot:=he(tot,c(i,1 shl k-1));
print(tot);
end. -
02009-07-06 22:12:09@
type arr=array[0..200]of longint;
var f:arr;
function chu(a:arr; b:longint):arr;
var c:arr; i,s:longint;
begin
fillchar(c,sizeof(c),0);
s:=0;
for i:=a[0] downto 1 do
begin
s:=s*10+a[i];
if s>=b then
begin
c[i]:=s div b;
s:=s mod b;
end
else c[i]:=0;
end;
c[0]:=a[0];
while c[c[0]]=0 do dec(c[0]);
exit(c);
end;
function cheng(a:arr; b:longint):arr;
var c:arr; i:longint;
begin
fillchar(c,sizeof(c),0);
for i:=1 to a[0] do
begin
inc(c[i],a[i]*b);
inc(c,c[i] div 10);
c[i]:=c[i] mod 10;
end;
c[0]:=a[0];
while c[c[0]+1]>0 do
begin
c[c[0]+2]:=c[c[0]+1] div 10;
c[c[0]+1]:=c[c[0]+1] mod 10;
inc(c[0]);
end;
exit(c);
end;
function try(n,m:longint):arr;
var a:arr; i:longint;
begin
fillchar(a,sizeof(a),0);
a[0]:=1; a[1]:=1;
if m=n then exit(a);
fillchar(a,sizeof(a),0);
if m>n div 2 then m:=n-m;
a[1]:=n; a[0]:=1;
for i:=n-1 downto n-m+1 do
begin
a:=cheng(a,i);
a:=chu(a,n-i+1);
end;
exit(a);
end;
function add(a,b:arr):arr;
var c:arr; i:longint;
begin
fillchar(c,sizeof(c),0);
if a[0]1) do dec(c[0]);
exit(c);
end;
procedure out;
var i:longint;
begin
for i:=f[0] downto 1 do write(f[i]);
writeln;
end;
procedure main;
var n,m,k,w,s,ss,i:longint; tmp:arr;
begin
readln(k,w);
n:=w div k;
m:=w mod k;
s:=1;
for i:=1 to k do s:=s*2;
dec(s);
if n>=s then
begin
n:=s;
m:=0;
end;
fillchar(f,sizeof(f),0);
for i:=2 to n do
begin
tmp:=try(s,i);
f:=add(f,tmp);
end;
ss:=1;
if m0 then
begin
for i:=1 to m do ss:=ss*2;
dec(ss);
for i:=1 to ss do
if s-i>=n then
begin
tmp:=try(s-i,n);
f:=add(f,tmp);
end;
end;
end;
begin
main;
out;
end. -
02009-06-14 14:59:50@
-
02009-05-26 12:33:49@
设m=w div k,c=w mod k
答案为
sigma(C(2^k-1,i)) |2 -
02009-03-07 20:10:14@
我用数论。。。。组合
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 571ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:571ms高精仔细!!SO EASY
-
02009-02-28 20:55:51@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案错误... ├ 标准行输出
├ 错误行输出
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms -
02009-02-17 22:34:32@
动态规划+高精度.
动态规划不难,但是高精度就要注意细节了! -
02008-12-15 23:41:07@
好诡异.......第6个点没过......
WHY?
方法与楼下基本相同,
f表示后i位(指转化成2^k进制后的),第i位为j的总数
f:=f+f
注意定义j的范围和初始化:
f[1,j]:=f[1,j+1]+1;
我用了一个二维DP,为了缩小数组,
只是用了二维的数组,写了一个我都恶心得受不了的程序
可是.........
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案错误... ├ 标准行输出
├ 错误行输出
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Unaccepted 有效得分:90 有效耗时:0msvar
a:array[1..512,0..200] of longint;
b:array[0..200] of longint;
n,i,j,k,x,s,t,v:longint;
f:boolean;
begin
readln(k,n);
x:=n mod k;t:=1;
for i:=1 to x do
t:=t*2;
t:=t-1;
x:=n div k;
s:=1;
for i:=1 to k do
s:=s*2;
f:=true;
if x>=s then begin
t:=s-1;f:=false;
end;
for i:=1 to s-1 do begin
a:=1;a:=1;end;
for i:=2 to x do
begin
for j:=0 to 200 do a[1,j]:=0;
for j:=2 to s-i+1 do
begin
if a[1,0]>a[j,0]
then v:=a[1,0] else v:=a[j,0];
for k:=1 to v do begin
a[1,k]:=a[1,k]+a[j,k];
if a[1,k]>=10 then begin
a[1,k+1]:=a[1,k+1]+a[1,k] div 10;
a[1,k]:=a[1,k] mod 10;
if k+1>v then a[1,0]:=k+1;
end;
end;
if v>a[1,0] then a[1,0]:=v;
end;j:=1;
for k:=1 to a[j,0] do
begin
b[k]:=b[k]+a[j,k];
if b[k]>=10 then begin
b[k+1]:=b[k+1]+b[k] div 10;
b[k]:=b[k] mod 10;
end;end;
for j:=2 to s-i+1 do
begin
for k:=1 to a[j-1,0] do
begin
a[j,k]:=a[j-1,k]-a[j,k];
if a[j,k]=10 then begin
b[k+1]:=b[k+1]+b[k] div 10;
b[k]:=b[k] mod 10;
end;end;
end;
end;
for j:=0 to 200 do a[1,j]:=0;
if t>0 then
for j:=2 to s-i do
begin
if a[1,0]>a[j,0]
then v:=a[1,0] else v:=a[j,0];
for k:=1 to v do begin
a[1,k]:=a[1,k]+a[j,k];
if a[1,k]>=10 then begin
a[1,k+1]:=a[1,k+1]+a[1,k] div 10;
a[1,k]:=a[1,k] mod 10;
if k+1>v then a[1,0]:=k+1;
end;
end;
end;
if v>a[1,0] then a[1,0]:=v;
j:=1;
for k:=1 to a[j,0] do
begin
b[k]:=b[k]+a[j,k];
if b[k]>=10 then begin
b[k+1]:=b[k+1]+b[k] div 10;
b[k]:=b[k] mod 10;
end;end;
for j:=2 to t do
begin
for k:=1 to a[j-1,0] do
begin
a[j,k]:=a[j-1,k]-a[j,k];
if a[j,k]=10 then begin
b[k+1]:=b[k+1]+b[k] div 10;
b[k]:=b[k] mod 10;
end;
end;
end;for i:=1 to 200 do
if b[i]>=10 then begin
b:=b+b[i] div 10;
b[i]:=b[i] mod 10;
end;
for i:=200 downto 1 do
if b[i]0 then break;
for j:=i downto 1 do
write(b[j]);
writeln;
end.
55555555.....最近做什么题都不对 - -!!!! -
02008-11-11 07:34:08@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
方程:
f表示后i位(指转化成2^k进制后的),第i位为j的总数
f:=f+f
注意定义j的范围和初始化:
f[1,j]:=f[1,j+1]+1; -
02008-11-08 14:40:28@
program digital;
var
k3,first,changdu,len,n,k,w,i,j,k2,jinwei,p,temp:integer;
ans,d,zhs,b,c:array[0..10000]of integer;
procedure zuhe(n,k:integer);
var
i1,o:integer;
begin
zhs[1]:=1;
changdu:=1;
for i:=(n-k)+1 to n do
begin
b[i]:=i;
end;
j:=n-k+1;
i:=2;
for i:=2 to k do
begin
c[i]:=i;
end;
for i:=2 to k do
begin
j:=n-k+1;
while c[i]1 do
begin
i1:=2;
while i1=10 then
begin
jinwei:=zhs[o] div 10;
zhs[o]:=zhs[o] mod 10;
end;end;
if jinwei0 then
begin
while jinwei0 do
begin
inc(changdu);
zhs[changdu]:=jinwei mod 10;
jinwei:=jinwei div 10
end;
end;
end;
end;
procedure gaojinjia;
var
i,j,k:integer;
begin
for i:=1 to changdu do
begin
ans[i]:=ans[i]+zhs[i]+jinwei;
jinwei:=0;
if ans[i]>=10 then
begin
jinwei:=ans[i] div 10;
ans[i]:=ans[i] mod 10;
end;
end;
while jinwei0 do
begin
inc(i);
ans[i]:=ans[i]+jinwei;
jinwei:=0;
if ans[i]>=10 then
begin
jinwei:=ans[i] div 10;
ans[i]:=ans[i] mod 10;
end;
if changdu+1>len then
len:=changdu+1end;
if changdu>len then
len:=changdu;end;
begin
read(k,w);k2:=1;
for i:=1 to k do
begin
k2:=k2*2;
end;
if w div k >k2 then
temp:=k2-1
else
temp:=w div k;
if (w mod k=0)or(w div k>k2-1) then
beginfor p:=2 to temp do
begin
zhs[1]:=1;
changdu:=1;
if k2-1>=p then
zuhe(k2-1,p)
else
break;gaojinjia;
fillchar(zhs,sizeof(zhs),0);
fillchar(c,sizeof(c),0);
fillchar(b,sizeof(b),0);
end;
endelse
begin
first:=w mod k ;if w div k >k2 then
temp:=k2-1
else
temp:=w div k;
for p:=2 to temp do
begin
zhs[1]:=1;
changdu:=1;
if k2-1>=p then
zuhe(k2-1,p)
else
break;
gaojinjia;
fillchar(zhs,sizeof(zhs),0);
fillchar(c,sizeof(c),0);
fillchar(b,sizeof(b),0);
end;
k3:=1;
for p:=1 to first do
begin
k3:=k3*2;
end;dec(k3);
for p:=1 to k3 do
beginzhs[1]:=1;
changdu:=1;
if (k2-1-p)>=(w div k) then
zuhe(k2-1-p,w div k)
else
break;
gaojinjia;
fillchar(zhs,sizeof(zhs),0);
fillchar(c,sizeof(c),0);
fillchar(b,sizeof(b),0);
end;
end;
for i:=len downto 1 do
begin
write(ans[i]);
end;
end.写的好丑...而且.
哎...
哪位大牛帮我看看吧... -
02008-11-06 12:30:04@
先用 c:=c+c 推出 c[1 shl k,w div k];
再计算,程序只有40+行,而且0ms. -
02008-11-02 13:52:48@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 9ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 87ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 321ms
├ 测试数据 09:答案正确... 633ms
├ 测试数据 10:答案正确... 0ms -
02008-11-02 11:19:50@
测评机又不稳定了
01和09换着TLE更搞笑的是
Flag
Accepted -
02008-10-31 21:34:27@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msf[i][j]=f[i][j+1]+f[j+1]
-
02008-10-29 18:58:20@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 118ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:118ms
很水的动规,加了个高精就wa了一大片 -
02008-10-27 22:34:40@
很想bs vj的评测系统。为什么我写0 then inc(len);
add[0]:=len;
end;
function minus(a,b:arr):arr;
var i,j:longint;
begin
fillchar(minus,sizeof(minus),0);
minus[0]:=a[0];
for i:=1 to minus[0] do
begin
if a[i]0)and(minus[minus[0]]=0) do dec(minus[0]);
end;
begin
readln(k,w);
n:=1 shl k-1; m:=w div k;
c:=false;
for i:=1 to n-1 do
begin f[c,i,0]:=1; f[c,i,1]:=n-i; ans:=add(ans,f[c,i]); end;
for i:=3 to m do
begin
c:=not c; fillchar(f[c],sizeof(f[c]),0);
for j:=2 to n-i+2 do
f[c,1]:=add(f[c,1],f[not c,j]);
ans:=add(ans,f[c,1]);
for j:=2 to n-i+1 do
begin
f[c,j]:=minus(f[c,j-1],f[not c,j]);
ans:=add(ans,f[c,j]);
end;
end;
m:=w mod k;
if m0 then
begin
c:=not c; fillchar(f[c],sizeof(f[c]),0);
for j:=2 to n-w div k+1 do f[c,1]:=add(f[c,1],f[not c,j]);
ans:=add(ans,f[c,1]);
for j:=2 to 1 shl m-1 do
begin
f[c,j]:=minus(f[c,j-1],f[not c,j]);
ans:=add(ans,f[c,j]);
end;
end;
write(ans[ans[0]]);
for i:=ans[0]-1 downto 1 do
case ans[i] of
0..9:write('000',ans[i]);
10..99:write('00',ans[i]);
100..999:write('0',ans[i]);
else write(ans[i]);
end;
writeln;
end.这不是代码
-
02008-10-22 11:59:52@
附上程序供您参考
#include
#include
#include
#define maxlen 2000
#define maxcase 2000
long k,w,ans[maxlen+10],r_c[maxlen+10];
void num_plus_be_num(long *c,long *a)
{
long i,len;
len=(c[0]>a[0])?c[0]:a[0];
for(i=1;i=2;--i)
{
v=i;
for(j=0;j