原题(来自老师)
1. 足球比赛
(football.pas/c/cpp) 时限1秒
【问题描述】
在2009的中国城市足球比赛中,在2^N支队中,有一些队在开赛前宣布了退出比赛。比赛采取的是淘汰赛。比如有4支队伍参加,那么1队和2队比赛,3队和4队赛,然后1队和2队的胜者与3队和4队的胜者争夺冠军。但是由于某些队伍退出,那么如果某个原本存在的比赛只有一个支队,那么这一支队自动晋级,如果没有队伍出现,那么就跟本没有比赛。比如,1队和2队退出比赛,那么就只有3队和4队的比赛,然后其胜者在原本和1队和2队的胜者的决赛中自动晋级,成为冠军。
给出哪些队退出的比赛计算会有多少场比赛中队伍自动晋级。
【输入】
第一行有两个数N(1<=N<=10),M。接下来有M个数,表示哪些队退出了比赛。选手编号从1到2
【输出】
在第一行输出有多少场比赛中队伍自动晋级。
【输入输出样例1】
football.in | football.out | |
|
1 |
【输入输出样例2】
football.in | football.out | |
|
2 |
【输入输出样例3】
football.in | football.out | ||
|
1 |
Pascal代码(Pillars原创)
program pizyds_2017_5_23_1; var n,m,i,temp,t:longint; so:array[0..2000] of boolean; function find(t:longint):longint; var i,j,s:longint; begin s:=0; t:=t div 2; for i:=1 to t do begin if so[2*i-1]<>so[2*i] then begin so[i]:=true; inc(s); end else if so[2*i-1] and so[2*i] then so[i]:=true else so[i]:=false; end; if t=1 then find:=s else find:=find(t)+s; end; begin assign(input,'football.in'); reset(input); assign(output,'football.out'); rewrite(output); readln(n,m); fillchar(so,sizeof(so),true); for i:=1 to m do begin read(temp); so[temp]:=false; end; t:=1; for i:=1 to n do t:=t*2; writeln(find(t)); close(input); close(output); end.
成绩
100% AC
文章评论