333 条题解
-
0fjlyzpcr LV 8 @ 2009-10-27 20:10:25
ac 0ms
压缩+DP
program ex;
var i,j,l,n,count,ans,s,t:longint;
a:array[0..100]of longint;
p:array[1..20000]of boolean;
f:array[0..20000]of longint;procedure sort;
var i,j,temp:longint;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then
begin
temp:=a[i];a[i]:=a[j];a[j]:=temp;
end;
end;procedure compress;
var i,j,len:longint;
begin
if s=t then
begin
for i:=1 to n do
if a[i] mod s=0 then inc(count);
writeln(count);
halt;
end;
sort;
len:=0;
fillchar(p,sizeof(p),false);
for i:=1 to n do
begin
if a[i]-len-a>s*t then len:=a[i]-(a+s*t);
dec(a[i],len);
p[a[i]]:=true;
end;
end;function min(a,b:longint):longint;
begin
if a>b then exit(b) else exit(a);
end;procedure dp;
var i,j:longint;
begin
filldword(f,sizeof(f)div 4,maxint);
f[0]:=0;
for i:=1 to a[n]+s*t do
for j:=i-s downto i-t do
if j>=0 then f[i]:=min(f[i],f[j])+ord(p[i]);
ans:=maxlongint;
for i:=a[n]+1 to a[n]+s*t do
if f[i] -
02009-10-24 20:05:54@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms -
02009-10-21 20:04:22@
。。
以前觉得很难得题,一下就A了。。
无语。。
看来水平长了。。。 -
02009-10-21 12:14:14@
AC爽啊
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms -
02009-10-18 08:22:06@
花了我好长时间,到最后错误反而是变量设重叠了,我晕!!!!!!!
-
02009-10-15 22:12:59@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
---|---|---|---|---|---|---|---|---|---|---|---|---|---|--
AC了此题,但是还是有一点困惑:
为什么循环是 :0 to t-1 而不是0 to t ,而且这是一个原则性的错误,因为如果用 0 to t 就得到了错解,而且总是错的。。。。。。。。。。。
这一题困了我整整一学期,终于弄懂了路径压缩的含义(自己感觉),WA了3次,最终AC了。。。。。。。。。。。 -
02009-10-15 12:56:31@
一次AC,原来虫洞跳跃是那么神奇!
AC 4周天纪念 -
02009-10-13 23:12:19@
苍天啊
这道题累计花费12小时以上,提交40次以上,今天A了,算我造孽 -
02009-10-11 11:06:37@
vijos怎么偷数据????????????????????????????????????????????????????????????????????
-
02009-10-08 18:21:27@
水水的状态压缩
Accepted 有效得分:100 有效耗时:0ms -
02009-10-07 21:38:48@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msL
-
02009-10-02 17:18:15@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msvar i,j,l,s,t,m,min1,w:longint;
a:array[0..103]of longint;
f:array[-100..260003]of longint;
x:array[-100..260003]of 0..1;
function min(x,y:longint):longint;
begin
if x>y then min:=y else min:=x;
end;
begin
readln(l);
readln(s,t,m);
for i:=-10 to 260003 do f[i]:=1000000;
fillchar(x,sizeof(x),0);
for i:=1 to m do read(a[i]);
if s=t then
begin
w:=0;
for i:=1 to m do if (a[i] mod s=0) then inc(w);
writeln(w);
end
else
begin
min1:=maxlongint;
for i:=1 to m-1 do
for j:=i+1 to m do if a[i]>a[j] then
begin
w:=a[i]; a[i]:=a[j]; a[j]:=w;
end;
for i:=1 to m do
while a[i]-a>2520 do
for j:=i to m do a[j]:=a[j]-2520;
for i:=1 to m do inc(x[a[i]]);
if x[0]=1 then f[0]:=1 else f[0]:=0;
if l>a[m] then l:=a[m];
for i:=1 to l+t do
for j:=s to t do
begin
if i>=j then
begin
f[i]:=min(f[i],f);end;
if x[i]=1 then inc(f[i]);
end;
for i:=l to l+t do if f[i] -
02009-10-02 00:12:09@
program p1002stonger;
var i,sum,l,s,t,m:longint;
ans{dp},a,b{back}:array[0..100000]of longint ;procedure init;
var i:longint;
beginreadln(l);
readln(s,t,m);
for i:=1 to m do
read(a[i]);
end;procedure quicksort(s,t:longint);
var i,j,t1,x:longint;
begin
i:=s;j:=t;
x:=a[i];
repeat
while (a[j]>=x) and(j>i) do dec(j);
if j>i then begin t1:=a[i];a[i]:=a[j];a[j]:=t1;end;
while (a[i] -
02009-09-27 17:40:09@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms哥豁着周六周天的考试和作业都没做。。。。。
整整两天。。。。终于AC了。。。。
明天等老班批了。。。 -
02009-09-27 16:32:43@
var
i,j,k,l,s,t,y,max,tt,min,m:longint;
a:array[0..101]of longint;
f:array[-10..100000]of longint;
v:array[1..100000]of boolean;
begin
fillchar(v,sizeof(v),false);
readln(l);
readln(s,t,m);
for i:=1 to m do
read(a[i]);
readln;
for i:=1 to m-1 do
for j:=i+1 to m do
if a[j]=max then{从0开时压缩,因为第一个石头可能离原点很远}
begin
tt:=a-(a[i]+max);
for j:=i+1 to m do
dec(a[j],tt);
end;
for i:=1 to m do
v[a[i]]:=true;
filldword(f,sizeof(f)div 4,maxint);
for i:=-10 to 0 do f[i]:=0;
for i:=1 to a[m]+t do
for j:=i-t to i-s do
if (v[i])and(f[j]+1=0) then f[i]:=f[j]+1
else if (not v[i])and(f[j]=0) then f[i]:=f[j];
min:=maxint;
for i:=a[m] to a[m]+t do
if f[i]=2 时:只需找s=1,t=2时的min即可,将他们各×10就能满足,因为他们的差值已超过可能的最大区间数(10)
同理:当s=2,t>=3 时:....
当s=3,t>=4 时:....
.........
当s=9,t=10时:所要找的就是:90——100。
且此时【90,100】满足所有条件,所以将min:=100 } -
02009-09-27 14:04:42@
怎一个状态压缩....搞得我吐血....
-
02009-09-26 16:41:02@
ar
a:array[0..100]of longint;
b:array[0..10000]of integer;
c:array[1..10000]of boolean;
i,j:integer;
l,tt:longint;
s,t,m:integer;
an,min:integer;
procedure deal;
var
nn:longint;
begin
nn:=0;
for i:=1 to m do
if a[i]-a>72 then
begin b[nn+72]:=1;nn:=nn+72;end
else
begin b[nn+a[i]-a]:=1;nn:=nn+a[i]-a;end;
l:=nn;
end;
begin
readln(l);
readln(s,t,m);
fillchar(b,sizeof(b),0);
for i:=1 to m do read(a[i]);
a[0]:=0;
for i:=1 to m-1 do
for j:=i+1 to m do
if a[i]>a[j] then
begin
tt:=a[i];
a[i]:=a[j];
a[j]:=tt;
end;
if s=t then
begin
an:=0;
for i:=1 to m do
if a[i] mod s=0 then an:=an+1;
end
else
begin
deal;
for i:=s to t do c[i]:=true;
for i:=t to l+t do
begin
min:=101;
for j:=s to t do
if cand(b -
02009-09-23 08:54:15@
这题我们学校网上为什么过不了呢?
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms -
02009-09-21 21:32:17@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms -
02009-09-18 20:14:54@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms