題目
在一條無限長的路上,有一排無限長的路燈,編號為1,2,3,4,…。
每一盞燈只有兩種可能的狀態,開或者關。如果按一下某一盞燈的開關,那么這盞燈的狀態將發生改變。如果原來是開,將變成關。如果原來是關,將變成開。
在剛開始的時候,所有的燈都是關的。小明每次可以進行如下的操作:
指定兩個數,a,t(a?為實數,t?為正整數)。將編號為?a?,?2×a?,?3×a?,…,?t×a??的燈的開關各按一次。其中?k??表示實數k?的整數部分。
在小明進行了n次操作后,小明突然發現,這個時候只有一盞燈是開的,小明很想知道這盞燈的編號,可是這盞燈離小明太遠了,小明看不清編號是多少。
幸好,小明還記得之前的n次操作。于是小明找到了你,你能幫他計算出這盞開著的燈的編號嗎?
輸入輸出格式
輸入格式
第一行一個正整數n,表示n次操作。
接下來有n行,每行兩個數ai?,ti?。其中ai??是實數,小數點后一定有6位,ti??是正整數。
輸出格式
僅一個正整數,那盞開著的燈的編號。
輸入輸出樣例
輸入
3
1.618034 13
2.618034 7
1.000000 21
?輸出
20
代碼
#include <bits/stdc++.h>//萬能頭文件,不過需要注意要求,有些場合不可以使用
using namespace std;
double a[5005];
int t[5005],d[2000005];
int n;
int main()
{memset(d,0,sizeof(d));//初始化數組為0scanf("%d",&n);//操作數for(int i=1;i<=n;i++){scanf("%lf%d",&a[i],&t[i]);//a,t}for(int i=1;i<=n;i++){for(int j=1;j<=t[i];j++){int b=floor(a[i]*j);//向下取整以后的位置記錄if(d[b]==0)//開關燈操作{d[b]=1;}else{d[b]=0;}}}for(int i=1;i<=2000005;i++){if(d[i]==1){printf("%d",i);break;}}return 0;
}