157 条题解
-
0416041139 LV 8 @ 2009-10-27 11:20:17
var
m,i,j,k,l,t:longint;
s,s1:ansistring;
w1,w0:longint;
n:array[1..11]of longint;
begin
readln(m);
readln(s);
n[1]:=1;
for i:=2 to m+1 do
n[i]:=n*2;
for i:=1 to n[m+1] do
for k:=1 to m+1 do
begin if i mod n[k]=0
then begin s1:=copy(s,i-n[k]+1,n[k]);
w0:=0;
w1:=0;
for j:=1 to n[k] do
begin
if s1[j]='0'
then inc(w0);
if s1[j]='1'
then inc(w1);
end;
if w0>0
then if w1>0
then write('F')
else write('B')
else write('I');
end;
end;
writeln;
end. -
02009-10-22 11:19:46@
-
02009-10-19 23:23:19@
第一次用GUIDE写 代码写丑了
类似线段树编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msconst
c:array[0..2]of char=('B','I','F');
var
m,n,i,j,k,p:longint;
t:array[1..5000]of longint;
s:ansistring;
procedure build(i,l,r:longint);
var m:longint;
begin
if l=r then
begin
t[i]:=ord(s[l])-48;
exit;
end;m:=(l+r)shr 1;
build(i shl 1, l,m);
build(i shl 1+1,m+1,r);
if (t[i shl 1]=0)and(t[i shl 1+1]=0) then t[i]:=0
else if (t[i shl 1]=1)and(t[i shl 1+1]=1)then t[i]:=1
else t[i]:=2;
end;function ask(i,l,r:longint):ansistring;
var m:longint;
begin
if l=r then exit(c[t[i]]);m:=(l+r)shr 1;
exit(ask(i shl 1,l,m)+ask(i shl 1+1,m+1,r)+c[t[i]]);
end;
procedure init;
begin
readln(m);
readln(s);
end;procedure main;
begin
build(1,1,length(s));
writeln(ask(1,1,length(s)));
end;begin
init;
main;
end. -
02009-10-18 08:46:33@
汗,用string WA了两次
var
a:array[1..10000] of char;
s:ansistring;
n,i,k:longint;
fbi:set of char;
procedure creat(x,h,t:longint);
var b0,b1:boolean; i:longint;
begin
b0:=true; b1:=true;
for i:=h to t do begin if s[i]'0' then b0:=false; if s[i]'1' then b1:=false; end;
if b0 then a[x]:='B'
else if b1 then a[x]:='I'
else a[x]:='F';
if h -
02009-10-11 13:00:01@
program vj1114;
var n:longint;
a:ansistring;
function work(x:ansistring):longint;
begin
if x='1' then work:=1
else if x='0' then work:=2
else work:=work(copy(x,1,length(x) div 2)) or
work(copy(x,length(x) div 2+1,(length(x)+1) div 2));
case work of
1:write('I');
2:write('B');
3:write('F');
end;
end;begin
readln(n);
readln(a);
work(a);
writeln;
end.第一次发现 function 可以当procedure 调用
-
02009-10-08 15:19:42@
var
i,j,k,n,p:integer;
a:array[1..10000] of integer;
s:string;
procedure try(t:integer);
begin
if t*2 -
02009-10-05 20:26:38@
program fbi;
var i,n,k:longint;
ch:array[1..300000]of char;function what(f,t:longint):char;
var h0,h1:longint;
begin
h0:=0; h1:=0;
for i:=f to t do if ch[i]='0' then inc(h0) else inc(h1);
if (h1>0)and(h0>0) then what:='F'
else if h1>0 then what:='I'
else if h0>0 then what:='B';
end;procedure dfs(f,t:longint);
var mid:longint;
begin
mid:=(f+t)div 2;
if t-f>0 then begin dfs(f,mid); dfs(mid+1,t) end;
write(what(f,t));
end;begin (*Main*)
readln(n);
k:=1;
for i:=1 to n do k:=k*2;
for i:=1 to k do read(ch[i]);
dfs(1,k);
writeln;
end. -
02009-09-24 14:07:46@
编译通过...
├ 测试数据 01:答案错误...
├ 标准行输出
├ 错误行输出├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案错误...
├ 标准行输出
├ 错误行输出├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案错误...
├ 标准行输出
├ 错误行输出---|---|---|---|---|---|---|---|-
Unaccepted 有效得分:70 有效耗时:0ms用字符串表示FBI树的前序遍历,然后dfs后序遍历,竟然错了3个。
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms郁闷………………………………
没考虑只有一个数的情况。
讨厌的FP无法跟踪ansistring,调试时换了string,提交时忘记改回来了。
又浪费了AC率吖……………… -
02009-09-21 12:55:19@
var
n,i,j:longint;
s:ansistring;
procedure make(s:string);
var p0,p1,l:longint;
begin
p0:=pos('0',s);
p1:=pos('1',s);
l:=length(s);
if l1 then begin
make(copy(s,1,l div 2));
make(copy(s,l div 2+1,l div 2));
end;
if (p00) and(p1=0) then write('B')
else if (p00) and (p10) then write('F')
else if (p0=0) and (p10) then write('I');
end;
begin
readln(n);
readln(s);
make(s);
end. -
02009-09-17 18:17:23@
编译通过...
├ 测试数据 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-13 11:15:29@
简单模拟呵呵~~
program ex;
var
n,i:integer;
w:array[1..11]of integer;
f:packed array[1..11,1..2]of ansistring;
t:ansistring;
begin
readln(n);
n:=n+1;
readln(t);
if n=1 then if t='1' then write('I') else write('B') else
repeat
if t[1]='1' then f[n,1]:='I' else f[n,1]:='B';w[n]:=w[n]+1;write(f[n,1]);
if t[2]='1' then f[n,2]:='I' else f[n,2]:='B';w[n]:=w[n]+1;write(f[n,2]);
for i:=n downto 1 do
if w[i]=2 then begin w:=w+1;
if ff then f[i-1,w]:='F' else f[i-1,w]:=f;
write(f[i-1,w]);
w[i]:=0;end;
delete(t,1,2);
until(length(t)=0);
end. -
02009-09-12 19:51:37@
为什么?
鄙菜没读懂题目……什么递归啊……
我悲剧了…… -
02009-09-12 10:49:22@
不用树结构,递归秒杀
program fbi;
var s,r:ansistring;
a,i,j,n:integer;
function ret(s:ansistring):char;
var i:integer;
begin
case s[1]of
'0':ret:='B';
'1':ret:='I';
end;
for i:=length(s) downto 1 do
if s[i]s[1] then exit('F');
end;
procedure visit(s:ansistring);
begin
r:=ret(s)+r;
if length(s)1 then
begin
visit(copy(s,length(s) div 2+1,length(s) div 2));
visit(copy(s,1,length(s) div 2));
end;
end;
begin
readln(n);
readln(s);
r:='';
visit(s);
writeln(r);
end. -
02009-09-11 16:51:54@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
type bitree=^biq;
biq=record
data:char;
left:bitree;
right:bitree;
end;
var n,x,i:longint; st:ansistring; node:bitree;
procedure zhao(var bit:bitree; l,r:longint);
var a,b,i,mid:longint;
begin
mid:=(l+r) div 2;
a:=0;
b:=0;
new(bit);
for i:=l to r do if st[i]='1' then a:=1 else b:=1;
if (a=1)and(b=1) then bit^.data:='F'
else if a=1 then bit^.data:='I' else bit^.data:='B';
if lr then
begin
zhao(bit^.left,l,mid);
zhao(bit^.right,mid+1,r);
end;
end;
procedure bianli(bit:bitree);
begin
if bitnil then
begin
bianli(bit^.left);
bianli(bit^.right);
write(bit^.data);
end;
end;
begin
readln(n);
x:=1;
for i:=1 to n do x:=x*2;
readln(st);
new(node);
node^.left:=nil;
node^.right:=nil;
zhao(node,1,x);
bianli(node);
end.
用ansistring! -
02009-09-05 19:39:58@
老老实实解题--
本题算法主要是两个步骤1是建树,2是输出
1.二分法递归建树:有人可能会想到每次二分后扫描一遍数组,看是否全是1或全是0,这样的速度太慢,我们可以用G[i]来表示从开头到第i个数时‘1’的个数,这样就可以通过1的个数来判断区间[l,r]上是否满足全‘1’或全‘0’。也即,对于区间[l,r],其中l为左边界,r为右边界:
若G[r]-G[l-1]=r-l+1则表示区间上全部是1,则tree[i]= ’I’;
若G[r]-G[l-1]=0 则表示区间上全部是0,则tree[i]= ’B’;
其他情况都是’F’。
2.按后序遍历输出序列:
即按左子树,右子树,根的顺序递归输出,具体见参考程序。
要注意输出的总个数为2^(n+1)-1 -
02009-09-03 18:32:26@
l:=length(st);
if l >= 2 then
begin
maketree(copy(st,1,l div 2));
maketree(copy(st,l div 2 + 1,l));
write(appletype(st));
exit;
end;
write(appletype(st)); -
02009-08-30 23:46:21@
无聊题目。。15行搞定。。
n直接忽略掉吧。。s记得ansi。。其他没了。。
var s:ansistring;
procedure print(s:ansistring);
var i:longint;
begin
if s='' then exit;
print(copy(s,1,length(s) shr 1));
print(copy(s,length(s) shr 1+1,length(s) shr 1));
if pos('0',s)=0 then write('I') else
if pos('1',s)=0 then write('B') else write('F');
end;
begin
readln; //为什么不把重点放前面。。
readln(s);
print(s);
end. -
02009-08-18 17:20:33@
var
n:integer;
s:ansistring;
procedure try(ss:ansistring;k:longint);
begin
if k=1 then
begin
if ss[k]='1' then write('I')
else write('B');
exit;
end;
try(copy(ss,1,k div 2),k div 2);
try(copy(ss,k div 2+1,k div 2),k div 2);
if (pos('0',ss)0)and(pos('1',ss)0)
then write('F')
else if pos('0',ss)0
then write('B')
else write('I');
end;
begin
readln(n);
readln(s);
try(s,length(s));
end. -
02009-08-15 16:17:50@
var
n:longint;
s:ansistring;
function work(s1:ansistring):ansistring;
var
m,i,j:longint;
begin
m:=length(s1);
if m=0 then exit;
if m=1 then
begin
if s1='1'then write('I')
else write('B');
exit;
end;
work(copy(s1,1,m div 2));
work(copy(s1,m div 2+1,m div 2));
i:=pos('1',s1);
j:=pos('0',s1);
if i=0 then write('B')
else
if j=0 then write('I')
else write('F');
end;
begin
readln(n);
readln(s);
writeln(work(s));
end.一次AC……
-
02009-08-13 15:52:13@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms特别要注意 输出时 F,B,I 要大写。不然一定0分