150 条题解
- 
  0yysyxxhh LV 8 @ 2009-07-26 15:05:02 谁具体告诉我一下怎么哈希 
- 
  0@ 2009-07-24 20:26:24while h 
- 
  0@ 2009-07-22 20:58:01BFS+判重。判重我借助了字符串 
- 
  0@ 2009-07-21 14:02:29SPFA、 
 看来要多做做位压的题了、
 K为目标状态、0没病、1有病(PS:怎么那么别扭额- -)
 zheng[i]
 if L=0,-1 Inc(zheng[i])
 fu[i]
 if L=-1 Inc(fu[i]) fu[i] shl 1
 吃了I药后的状态、(k or fu[i]) and zheng[i]随便写写、、大牛勿喷、、 
- 
  0@ 2009-07-15 10:58:50var n,m,g,h,l,k,i:integer; 
 a:array[1..100,1..10] of integer;
 f:array[0..1024,1..11] of boolean;
 f2:Array[0..1024] of integer;
 ch:boolean;
 function check:boolean;
 var i,j:integer;
 begin
 for i:=1 to k-1 do
 for j:=1 to n do
 if ff[k,j] then break else
 if j=n then begin check:=false; exit; end;
 check:=true;
 end;function check2:boolean; 
 var i:integer;
 begin
 i:=1;
 while f[k-1,i]=true do i:=i+1;
 if i=n+1 then check2:=true else check2:=false;
 end;begin 
 read(n,m);
 for g:=1 to m do
 for h:=1 to n do
 read(a[g,h]);
 k:=1;
 while lk do begin
 for g:=1 to m do begin
 f[k]:=f[l];
 for h:=1 to n do
 if a[g,h]=1 then f[k,h]:=true else
 if a[g,h]=-1 then f[k,h]:=false;
 if check then begin
 f2[k]:=f2[l]+1;
 k:=k+1;
 if check2 then begin write(f2[k-1]); exit; end;
 end else for h:=1 to n do f[k,h]:=false;
 end;
 l:=l+1;
 end;
 write('The patient will be dead.');
 end.第三和第四个点卡了N久,原来死循环了…… 
- 
  0@ 2009-06-23 16:37:38P1019弱化版 
 把1019的程序拿来改了改,1次AC
- 
  0@ 2009-06-08 22:53:47这个题不是状态压缩Dp么...? 
- 
  0@ 2009-05-15 16:46:45var i,j,kkk,yyy,n,m:integer; 
 boo:boolean;
 a:array[1..100,1..10] of integer;
 b,bb:array[0..1024] of boolean;
 c,d,dd:array[1..11]of integer;
 procedure fdq(k:integer);
 var i,j,s:integer;
 begin
 if k>n then begin
 s:=0;
 for i:=1 to n do
 inc(s,c[i]*d[i]);
 dd:=d;
 if bb then begin
 for j:=1 to n do
 if a[yyy,j]=1 then dd[j]:=0 else
 if a[yyy,j]=-1 then dd[j]:=1;
 s:=0;
 for i:=1 to n do
 inc(s,c[i]*dd[i]);
 if not b then begin
 b:=true;
 boo:=false;
 end;
 end;
 end else begin
 d[k]:=0;
 fdq(k+1);
 d[k]:=1;
 fdq(k+1);
 end;
 end;
 begin
 readln(n);
 readln(m);
 for i:=1 to m do begin
 for j:=1 to n do read(a);
 readln;
 end;
 fillchar(b,sizeof(b),false);
 c[1]:=1;
 for i:=2 to n do c[i]:=c*2;
 b[c[n]*2-1]:=true;
 for kkk:=1 to 10000 do begin
 boo:=true;
 bb:=b;
 for yyy:=1 to m do
 fdq(1);
 if b[0] then begin
 writeln(kkk);
 halt;
 end;
 if boo then begin
 writeln('The patient will be dead.');
 halt;
 end;
 end;
 end.
- 
  0@ 2009-05-13 14:59:19编译通过... 
 ├ 测试数据 01:答案正确... 0ms
 ├ 测试数据 02:答案正确... 0ms
 ├ 测试数据 03:答案正确... 0ms
 ├ 测试数据 04:答案正确... 0ms
 ├ 测试数据 05:答案正确... 0ms
 ├ 测试数据 06:答案正确... 0ms
 ├ 测试数据 07:答案正确... 0ms
 ├ 测试数据 08:答案正确... 0ms
 ├ 测试数据 09:答案正确... 0ms
 ├ 测试数据 10:答案正确... 0ms
 ---|---|---|---|---|---|---|---|-
 Accepted 有效得分:100 有效耗时:0ms第n次提交了,细节啊呜~~~~~~~~~~~~~~~~ hash+递归 var i,j,kkk,yyy,n,m:integer; 
 boo:boolean;
 a:array[1..100,1..10] of integer;
 b,bb:array[0..1024] of boolean;
 c,d,dd:array[1..11]of integer;
 procedure fdq(k:integer);
 var i,j,s:integer;
 begin
 if k>n then begin
 s:=0;
 for i:=1 to n do
 inc(s,c[i]*d[i]);
 dd:=d;
 if bb then begin
 for j:=1 to n do
 if a[yyy,j]=1 then dd[j]:=0 else
 if a[yyy,j]=-1 then dd[j]:=1;
 s:=0;
 for i:=1 to n do
 inc(s,c[i]*dd[i]);
 if not b then begin
 b:=true;
 boo:=false;
 end;
 end;
 end else begin
 d[k]:=0;
 fdq(k+1);
 d[k]:=1;
 fdq(k+1);
 end;
 end;
 begin
 readln(n);
 readln(m);
 for i:=1 to m do begin
 for j:=1 to n do read(a);
 readln;
 end;
 fillchar(b,sizeof(b),false);
 c[1]:=1;
 for i:=2 to n do c[i]:=c*2;
 b[c[n]*2-1]:=true;
 for kkk:=1 to 10000 do begin
 boo:=true;
 bb:=b;
 for yyy:=1 to m do
 fdq(1);
 if b[0] then begin
 writeln(kkk);
 halt;
 end;
 if boo then begin
 writeln('The patient will be dead.');
 halt;
 end;
 end;
 end.
- 
  0@ 2009-04-03 13:22:13printf("The patient will be dead.\n"); 
 写成了printf("The patient will be dead\n");
 结果一个劲说我超时。。。害我在那看哪里超时了 。。。。
- 
  0@ 2009-03-27 12:32:40编译通过... 
 ├ 测试数据 01:答案正确... 0ms
 ├ 测试数据 02:答案正确... 0ms
 ├ 测试数据 03:答案正确... 0ms
 ├ 测试数据 04:答案正确... 0ms
 ├ 测试数据 05:答案正确... 0ms
 ├ 测试数据 06:答案正确... 0ms
 ├ 测试数据 07:答案正确... 0ms
 ├ 测试数据 08:答案正确... 0ms
 ├ 测试数据 09:答案正确... 0ms
 ├ 测试数据 10:答案正确... 0ms
 ---|---|---|---|---|---|---|---|-
 Accepted 有效得分:100 有效耗时:0msbfs+hash 
- 
  0@ 2009-03-14 23:02:38编译通过... 
 ├ 测试数据 01:答案正确... 0ms
 ├ 测试数据 02:答案正确... 0ms
 ├ 测试数据 03:答案正确... 0ms
 ├ 测试数据 04:答案正确... 0ms
 ├ 测试数据 05:答案正确... 0ms
 ├ 测试数据 06:答案正确... 0ms
 ├ 测试数据 07:答案正确... 0ms
 ├ 测试数据 08:答案正确... 0ms
 ├ 测试数据 09:答案正确... 0ms
 ├ 测试数据 10:答案正确... 0ms
 ---|---|---|---|---|---|---|---|-
 Accepted 有效得分:100 有效耗时:0ms
 刚开始,i打成j,还有30分.......(有3个答案是2);
 第二次,来了个A*算法,90,不知那错...(后来发现没有注意到'the ........')
 最后,干脆弄个简单的HASH,秒杀.....
 这道题教育我们,难度2的题目,根本不用去想双向动规和A*
- 
  0@ 2009-03-14 16:59:00编译通过... 
 ├ 测试数据 01:答案正确... 0ms
 ├ 测试数据 02:答案正确... 0ms
 ├ 测试数据 03:答案正确... 0ms
 ├ 测试数据 04:答案正确... 0ms
 ├ 测试数据 05:答案正确... 0ms
 ├ 测试数据 06:答案正确... 0ms
 ├ 测试数据 07:答案正确... 0ms
 ├ 测试数据 08:答案正确... 0ms
 ├ 测试数据 09:答案正确... 0ms
 ├ 测试数据 10:答案正确... 0ms
 ---|---|---|---|---|---|---|---|-
 Accepted 有效得分:100 有效耗时:0ms
 哈哈!
- 
  0@ 2009-03-11 13:06:08编译通过... 
 ├ 测试数据 01:答案正确... 0ms
 ├ 测试数据 02:答案正确... 0ms
 ├ 测试数据 03:答案正确... 0ms
 ├ 测试数据 04:答案正确... 0ms
 ├ 测试数据 05:答案正确... 0ms
 ├ 测试数据 06:答案正确... 0ms
 ├ 测试数据 07:答案正确... 0ms
 ├ 测试数据 08:答案正确... 25ms
 ├ 测试数据 09:答案正确... 0ms
 ├ 测试数据 10:答案正确... 0ms
 ---|---|---|---|---|---|---|---|-
 Accepted 有效得分:100 有效耗时:25ms
 一次AC,感觉棒极了。
 var
 n,m,i,j,i1,j1,q1,q2,tmpint:integer;
 tmp:array[1..10]of integer;
 list:array[1..30000,1..10]of ^integer;
 b:array[1..30000]of ^integer;
 a:array[1..100,1..10]of integer;
 boo1,boo2:boolean;
 begin
 readln(n);
 readln(m);
 for i:=1 to m do
 for j:=1 to n do read(a);
 for i:=1 to n do begin
 new(list[1,i]);
 list[1,i]^:=-1;
 end;
 q1:=1;q2:=1;
 new(b[1]);
 b[1]^:=0;
 while q1m then begin
 writeln('The patient will be dead.');
 halt;
 end;
 for i:=1 to m do begin
 for j:=1 to n do tmp[j]:=list[q1,j]^;
 for J:=1 to n do begin
 tmpint:=tmp[j]+a;
 if tmpint0 then tmp[j]:=0;
 if tmpint=0 then tmp[j]:=0;
 end;
 boo2:=true;
 for i1:=1 to q2 do begin
 boo1:=false;
 for j1:=1 to n do if list[i1,j1]^tmp[j1] then begin
 boo1:=true;
 break;
 end;
 boo2:=boo2 and boo1;
 if not boo2 then break;
 end;
 if boo2 then begin
 inc(q2);
 for j:=1 to n do begin
 new(list[q2,j]);
 list[q2,j]^:=tmp[j];
 new(b[q2]);
 b[q2]^:=b[q1]^+1;
 end;
 boo1:=true;
 for j:=1 to n do if tmp[j]0 then begin
 boo1:=false;
 break;
 end;
 if boo1 then begin
 writeln(b[q2]^);
 halt;
 end;
 end;
 end;
 inc(q1);
 end;
 writeln('The patient will be dead.');
 end.
- 
  0@ 2009-01-26 22:29:35位运算 BFS 记忆化 不错的题目. 
- 
  0@ 2009-01-17 15:18:30[red]**第100道 纪念**[/red] 
 标准的宽搜,用了Hash可以秒杀
- 
  0@ 2008-11-09 12:36:44BFS判断是否重复时 ,就从后向前扫描一遍就得了。根本不用HASH表。 
 题目很适合初学者
- 
  0@ 2008-11-04 13:48:18DP 34行AC 
- 
  0@ 2008-11-02 15:22:21这是数据的位运算读入 
 cure[i]:=0;
 for j:=1 to n do
 if a[j]=1 then cure[i]:=cure[i] shl 1 else cure[i]:=(cure[i]+1) shl 1;
 cure[i]:=cure[i] shr 1;
 anti[i]:=0;
 for j:=1 to n do
 if a[j]=-1 then anti[i]:=(anti[i] + 1) shl 1 else anti[i]:=anti[i] shl 1;
 anti[i]:=anti[i] shr 1;然后在进行搜索或者最短路径求解的时候 
 go:=(q[l] and cure[i]) or anti[i];就可以了
- 
  0@ 2008-11-01 19:38:30典型贪心法