67 条题解
-
0Halt LV 9 @ 2008-09-04 15:30:16
var
i,j,n,m,ans,t:integer;
chr:char;
a:array[1..100,1..100] of char;
b:array['A'..'Z'] of boolean;
c:array['A'..'Z',1..4] of integer;
f:array['A'..'Z','A'..'Z'] of boolean;
w:array[1..100] of string;procedure output;
var lk:integer;
begin
for lk:=1 to t do
writeln(w[lk]);
end;procedure qsort(lx,rx:longint);
var
i,j:longint;
mid,tt:string;
begin
i:=lx;
j:=rx;
mid:=w[(i+j)shr 1];
repeat
while w[i]mid do dec(j);
if ij;
if ilx then qsort(lx,j);
end;procedure print(l:string);
var o:integer;
begin
t:=t+1;w[t]:='';
for o:=1 to ans do
w[t]:=w[t]+l[o];
end;function tr(qq:char;stri:string):boolean;
var ll,kkl:integer;
begin
tr:=true;
ll:=length(stri);
for kkl:=1 to ll do
if (f[qq,stri[kkl]]) then
begin
tr:=false;
exit;
end;
end;procedure dij;
var ii,jj,kk:char;
qq:boolean;
begin
repeat
qq:=false;
for ii:='A' to 'Z' do
for jj:='A' to 'Z' do
for kk:='A' to 'Z' do
if (iijj) and (iikk) and (jjkk) then
if (f[ii,kk]) and (f[kk,jj]) and (not f[ii,jj]) then
begin
f[ii,jj]:=true;
qq:=true;
end;
until qq=false;
end;procedure topu(cc:char;s:string);
var q:char;
begin
if length(s)=ans then begin print(s);exit;end;
for q:='A' to 'Z' do
if (b[q]) and (pos(q,s)=0) and (tr(q,s)) then topu(q,s+q);
end;procedure fugai(cr:char);
var p1,p2:integer;
begin
for p1:=c[cr,1] to c[cr,3] do
begin
if (a[p1,c[cr,2]]cr) then f[cr,a[p1,c[cr,2]]]:=true;
if (a[p1,c[cr,4]]cr) then f[cr,a[p1,c[cr,4]]]:=true;
end;
for p2:=c[cr,4] to c[cr,2] do
begin
if (a[c[cr,1],p2]cr) then f[cr,a[c[cr,1],p2]]:=true;
if (a[c[cr,3],p2]cr) then f[cr,a[c[cr,3],p2]]:=true;
end;
end;procedure find(ch:char);
var
k1,k2:integer;
begin
c[ch,1]:=maxint;
c[ch,2]:=0;
c[ch,3]:=0;
c[ch,4]:=maxint;
for k1:=1 to n do
for k2:=1 to m do
if a[k1,k2]=ch then
begin
if k1c[ch,2] then c[ch,2]:=k2;
if k1>c[ch,3] then c[ch,3]:=k1;
if k2 -
02008-08-28 10:20:36@
USACO的原题
-
02008-08-26 09:49:47@
拓仆排序而已,先处理图像,记录下各矩形的上下左右边界,再对各矩形扫描一次,假设扫描到矩形A的某一个位置时发现显示的是矩形B,那么就令F['B','A']为TRUE,即表示B到A的一条有向边,扫描完一个矩形后计算一下它的入度。
将没有出现过的矩形的FLAG标记为TRUE,接下来就是单纯的拓仆排序了,拓仆排序是什么?自己查吧。
procedure search(x:longint; ch:char);
var ich:char;
begin
st:=ch+st; flag[ch]:=true;
if x=n then begin
inc(c); ans[c]:=st;
end else begin
for ich:='A' to 'Z' do
if f[ch,ich] then dec(d[ich]);
for ich:='A' to 'Z' do
if not flag[ich] and (d[ich]=0) then
search(x+1,ich);
for ich:='A' to 'Z' do
if f[ch,ich] then inc(d[ich]);
end;
delete(st,1,1); flag[ch]:=false;
end;主程序中:
for ch:='A' to 'Z' do
if not flag[ch] and (d[ch]=0) then search(1,ch);要排序,VIJOS上的数据太弱了,我开的1000的ANS数组,冒泡排序0MS
USACO上要开10000的数组,用快排 -
02008-08-10 12:00:47@
搜索+弱弱优化=AC
-
02008-08-04 15:12:14@
总第800次提交终于过了,原来一直只过一半,后来发现在生成放置方式的时候没有按字典顺序,加了个排序就过了!开心啊这么久,再次不看题解过了一道题!
-
02008-07-21 09:57:03@
从后往前搜,先搜最后放的那个,这样可以一边搜一边判断是否误放,可以说,这样搜不会浪费时间,应该比较快吧。
-
02008-07-14 16:49:17@
编译通过...
├ 测试数据 01:运行超时...
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Unaccepted 有效得分:75 有效耗时:0ms........................无语了
问下,这个可能是为什么啊 -
02007-11-14 09:31:56@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms -
02007-11-13 15:11:15@
数据太弱
-
02007-11-11 12:04:10@
我觉得时间复杂度可以优化一下
我的方法是
先看能找到哪个方框全是由一个字母组成的
就是最上面的,
下面找由n-1个字母组成的,类推。
假如找不到,则开始搜索
这样可以快很多滴鸭 -
02007-11-10 21:02:16@
用五个数组记录一开始的摆放
然后搜索从第1,2,3,..先放
在搜索接下来的......
搜到和输入的答案一样的就退出 -
02007-11-08 20:26:05@
讲清楚步骤吧,不会啊,哈哈哈
-
02007-11-07 11:20:06@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms先构图然后拓扑排序就行了。
-
02007-11-06 13:26:02@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
这道题我认为比较难,没有whqlsc的帮助我
是无法通过的,orz whqlsc神牛 -
02007-10-29 18:10:52@
晕,不用那么长,80行足够了,4个0ms。数据太弱了!
先预处理,计算出哪个盖着哪个,然后直接DFS。最后快排结果,输出。 -
02007-10-28 19:00:55@
我这么弱也能0ms..
上帝啊,146行,好久没打这么长的东西了。从饭前打到饭后。
一直侥幸的希望不打拓补,事实证明是不可以的,于是最后还是打了。
-
02007-10-11 12:38:52@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms简单的拓扑排序
-
02007-08-12 19:32:42@
topu排序加bfs
-
02007-08-09 20:29:14@
比较深的图形处理
-
02007-08-03 14:47:58@
数据的确比较弱。。。