3923 - 灯光师小明
灯光师小明控制着各种晚会的各种大小灯,每次晚会小明都会对灯进行很多次操作。对每盏灯只能进行两种操作,开和关。现在小明希望自己随时都知道还有多少盏灯亮着。你需要编写一个程序当小明问你时你能快速的说出还有多少盏灯亮着,晚会开始时所有的灯都是灭的。
题目输入
只有一组数据第一行输入两个正整数N,T(0<N<=100000,0<T<=1000000)N表示有N盏灯,T表示有T条指令。随后T行每行有一条指令,这条指令包含一个字符串,当字符串为CHANGE,它后面还有一个整数m,表示对第m盏灯进行一次操作(操作表示如果第m盏灯灯是开着时就关闭,如果灯是关着时就打开)。当字符串为QUERY,表示小明想查询现在还有多少盏灯亮着。
题目输出
每次查询指令输出占一行,输出当前亮着灯的个数
输入/输出样例
题目输入
10 8 CHANGE 1 QUERY CHANGE 2 QUERY CHANGE 1 CHANGE 9 CHANGE 7 QUERY
题目输出
1 2 3
C语言解答
#include<stdio.h> int main() { int n,t,p,q[100000],s; char a[50]; while(scanf("%d%d",&n,&t)!=EOF) { getchar(); for(p=0;p<n;p++) { q[p]=0; } while(t--) { scanf("%s",&a); if(a[0]=='C') { scanf("%d",&p); if(q[p-1])q[p-1]=0; else q[p-1]=1; } else { s=0; for(p=0;p<n;p++) { s+=q[p]; } printf("%d\n",s); } } } return 0; }
C++解答
#include<stdio.h> bool a[100010]; int main() { int n,m,t,k,l,count=0; char c[10]; scanf("%d%d",&n,&t); while(t--) { scanf("%s",c); if(c[0]=='C') { scanf("%d",&l); a[l]=!a[l]; if(a[l]==1) count++; else count--; } if(c[0]=='Q') printf("%d\n",count); } return 0; }