奖品选择

32 篇文章 0 订阅
17 篇文章 0 订阅
 
背景 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.


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值