问题标题: 酷町堂:1631 趣味琴盘(piano) 大神来救我!!!

0
0
张宇轩
张宇轩
初级守护
初级守护

题目描述 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届信息学竞赛第四题


1
被禁言 李秉轩
李秉轩
修练者
修练者

又一完整代码

/*
#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;
} 
*/

 

0
0
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;
        }
    }

这是第二部分。

定义自己搞。

 

悄悄告诉你:这有可能是我最后一次回答了。

0
0
0
0
李牧晓
李牧晓
中级天翼
中级天翼
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++;
    }
0
赵天乐
赵天乐
高级守护
高级守护

这题模拟琴盘,0为按下,1弹起;

注意:去小数用强制类型转换(int)(.......)

0
0
0
0
0
0
我要回答