灯光开关切换(c++)
题目描述
Farmer John 为了保持奶牛拥有一个聪明的脑袋(很令人怀疑,囧),所以让它们玩脑力开发玩具。其中一个较大型的玩具就是在牛棚中的电灯。农场中总共有 N ( 2 <= N <= 500 ) 个牛棚,每个牛棚上方都有一个编号为 1 到 N 的彩色灯泡。
傍晚时分,所有的灯泡都是关闭着的。奶牛们通过 N 个按钮来控制着灯泡的开与关。按下编号为 i 的按钮会使编号为 i 的灯泡的状态改变,比如从开到关,从关到开。
奶牛们阅读并执行一个由 M ( 1 <= M <= 2000 ) 个操作符和它的参数所组成的操作清单。每个操作符由一个整数表示 ( 0 <= 操作符 <= 1 )。
编号为 0 的操作符包括 2 个参数,Si 和 Ei ( 1 <= Si <= Ei <= N ),要求奶牛依次按下了从第 Si 号开关到第 Ei 号的开关。
编号为 1 的操作符仍然有2个参数,Si 和 Ei 。这条命令要求奶牛数出在第 Si 号和第 Ei 号灯泡之中,有多少灯泡是亮着的。
请你帮助 Farmer John 确定奶牛是否按下了正确的按钮和数出正确的答案。
输入格式
第一行:2 个由空格分开的整数 N 和 M 。
第二行到第 M+1 行:每一行有 3 个由空格分开的整数:操作符(0或1),Si,Ei
输出格式
每次出现 1 号操作符就输出一次正确的当前灯光状态为开的灯泡数量。
样例
输入数据 1
4 5
0 1 2
0 2 4
1 2 3
0 2 4
1 1 4
Copy
输出数据 1
1
2
Copy
样例解释
指令 | 灯泡状态 O表示关,*表示开 | 指令的操作解释 | 输出信息 |
---|---|---|---|
初始状态 | O O O O | ||
0 1 2 | * * O O | 切换编号为 1 和 2 的灯泡的状态 | |
0 2 4 | * O * * | 切换编号为 2,3,4 的灯泡的状态 | |
1 2 3 | * O * * | 输出从编号 2 到编号 3 之间灯泡状态为开的灯泡数量 | 1 |
0 2 4 | * * O O | 切换编号为 2,3,4 的灯泡的状态 | |
1 1 4 | * * O O | 输出从编号 1 到编号 4 之间灯光状态为开的灯泡数量 | 2 |
#include<bits/stdc++.h>
using namespace std;
int n,t,a[1005];
int main(){
cin>>n>>t;
while(t--){
int k,x,y;
cin>>k>>x>>y;
if(k==1){
int s=0;
for(int i=x;i<=y;i++)s+=a[i];
cout<<s<<"\n";
}
else{
for(int i=x;i<=y;i++){
if(a[i]==0)a[i]=1;
else a[i]=0;
}
}
}
return 0;
}