背景 Background | |||
清北学堂杯Tyvj2周年邀请赛 第一道 | |||
描述 Description | |||
为了Tyvj2周年邀请赛,Admin有N个物品,他们分别放到了N个大小相同的盒子中,由于某种原因,Admin只想选择其中的一些作为比赛的奖品,但是由于物品数量太多,所以请你写一个程序来帮帮他吧!Admin一共需要以下功能: 1.查询是否有物品被选择(初始状态下所有物品都没有被选择) 2.当前选择了多少物品 3.查询编号为id的物品选择情况 4.将编号为id的物品选择情况取反(原先选择变为不选择,原先不选择变为选择) | |||
输入格式 Input Format | |||
第一行N,M,表示有N个物品,M个操作 下面共M行,每一行描述一个操作 如果这行是”any”,则表示第一个操作 如果这行是”count”,则表示第二个操作 如果这行是”find”+id,则表示第三个操作 如果这行是”filp”+id,则表示第四个操作 | |||
输出格式 Output Format | |||
每个第一、二、三操作,都需要输出一行。对于第一个询问,输出T或者F分别表示有和无,第二个操作输出一个数,第三个操作输出T或F,分别表示选择和没有选择。 | |||
样例输入 Sample Input [复制数据] | |||
样例输出 Sample Output [复制数据] | |||
时间限制 Time Limitation | |||
各个测试点1s | |||
注释 Hint | |||
【数据范围】 30%的数据,n<=100 100%的数据,n<=10^15,m<=100,0<id<=n | |||
|
|
| |
| 来源 Source |
var a:array[0..1000] of string;
n:int64;
s,s0:string;
m,i,j,k,sum:longint;
function find(s:string):longint;
var i:longint;
begin
for i:=1 to sum do
if a[i]=s then exit(i);
exit(0);
end;
procedure del(x:longint);
var i:longint;
begin
for i:=x to sum-1 do
a[i]:=a[i+1];
dec(sum);
end;
begin
assign(input,'p1.in'); assign(output,'p1.out');
reset(input); rewrite(output);
readln(n,m);
for i:=1 to m do
begin
readln(s);
s0:=copy(s,1,3); delete(s,1,pos(' ',s));
if s0='any' then
if sum=0 then writeln('F') else writeln('T');
if s0='cou' then writeln(sum);
if s0='fin' then
if find(s)<>0 then writeln('T') else writeln('F');
if s0='fil' then
begin k:=find(s);
if k<>0 then del(k) else
begin inc(sum); a[sum]:=s; end;
end;
end;
close(input); close(output);
end.