初级守护
题目描述 Description
有一个非常好玩的钢琴,它拥有一个奇特的琴盘,琴盘中的键可以无限增加,从左到右依次编号为1,2,3,4,……。 每一键只有两种可能的状态,弹起或者按下。如果按一下某一个键盘,那么这个键盘的状态将发生改变:如果原来是按下,将变成弹起;如果原来是弹起,将变成按下。 在刚开始的时候,所有的键盘都是按下的。 牛牛每次可以进行如下的操作: 指定两个数:a,t(a为实数,t为正整数)。将编号为[a],[2 * a],[3 * a],……,[t * a]的键盘各按一次。其中[k]表示实数k的整数部分,例如[1.554555]为1。 在牛牛进行了n次操作后,他突然发现,这个时候只有一个键盘是弹起的,牛牛很想知道这个键盘的编号,可是这键盘离牛牛太远了,他看不清编号是多少。 幸好,牛牛还记得之前的n次操作。于是牛牛找到了你,你能帮他计算出这个弹起的键盘的编号吗?
输入描述 Input Description
第一行一个正整数n,表示n次操作。
接下来有n行,每行两个数:ai,ti。其中ai是实数,小数点后一定有6位,ti是正整数。
输出描述 Output Description
仅一个正整数,那个弹起的键盘的编号。
样例输入 Sample Input
3
1.618034 13
2.618034 7
1.000000 21
样例输出 Sample Output
20
数据范围及提示 Data Size & Hint
记T=t1+t2+t3+……+tn。
对于30%的数据,满足T<=1000
对于80%的数据,满足T<=200000
对于100%的数据,满足T<=2000000
对于100%的数据,满足n<=5000,1<=ai<1000,1<=ti<=T
数据保证,在经过n次操作后,有且只有一个键盘是弹起的,不必判错。
数据来源 Source
合肥市30届信息学竞赛第四题
修练者
又一完整代码
/*
#include<iostream>
using namespace std;
bool b[2000005];
int n,t;
double a;
int main(){
cin>>n;
while(n--){
cin>>a>>t;
for(int i=1;i<=t;i++){
int num= a*i;
b[num]=!b[num];
}
}
int pos=1;
while(1){
if(b[pos]==true){
cout<<pos;
break;
}
pos++;
}
return 0;
}
*/
资深光能
for(int i=0;i<n;i++){
cin>>a>>t;
for(int j=1;j<=t;j++){
c[int(j*a)]=!c[int(j*a)];
}
}
这是第一部分!
for(int i=1;i<=2000000;i++){
if(c[i]==1){
cout<<i;
break;
}
}
这是第二部分。
定义自己搞。
悄悄告诉你:这有可能是我最后一次回答了。
中级天翼
cin>>n;
while(n--){
cin>>a>>t;
for(int i=1;i<=t;i++){
int num=a*i;
b[num]=!b[num];
}
}
int pos=1;
while(1){
if(b[pos]==true){
cout<<pos;
break;
}
pos++;
}