Problem Description
AtCoDeer the deer is seeing a quick report of election results on TV. Two candidates are standing for the election: Takahashi and Aoki. The report shows the ratio of the current numbers of votes the two candidates have obtained, but not the actual numbers of votes. AtCoDeer has checked the report N times, and when he checked it for the i-th (1≦i≦N) time, the ratio was Ti:Ai. It is known that each candidate had at least one vote when he checked the report for the first time.
Find the minimum possible total number of votes obtained by the two candidates when he checked the report for the N-th time. It can be assumed that the number of votes obtained by each candidate never decreases.
Constraints
- 1≦N≦1000
- 1≦Ti,Ai≦1000(1≦i≦N)
- Ti and Ai (1≦i≦N) are coprime.
- It is guaranteed that the correct answer is at most 1018.
Input
The input is given from Standard Input in the following format:
N
T1 A1
T2 A2
:
TN ANOutput
Print the minimum possible total number of votes obtained by Takahashi and Aoki when AtCoDeer checked the report for the N-th time.
Example
Sample Input 1
3
2 3
1 1
3 2Sample Output 1
10
When the numbers of votes obtained by the two candidates change as 2,3→3,3→6,4, the total number of votes at the end is 10, which is the minimum possible number.Sample Input 2
4
1 1
1 1
1 5
1 100Sample Output 2
101
It is possible that neither candidate obtained a vote between the moment when he checked the report, and the moment when he checked it for the next time.Sample Input 3
5
3 10
48 17
31 199
231 23
3 2Sample Output 3
6930
题意:两个人进行选举,进行 n 轮检查,每轮检查给出两人的票数的比例,问两人的获得的最小总票数
思路:
暴力枚举即可,每次输入时计算当前轮数与上一轮的最大比例,然后不断累加比例直到当前轮数的票数大于上一轮的票数,直到最后一轮,其票数就是最小的总票数
Source Program
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#define EPS 1e-9
#define PI acos(-1.0)
#define INF 0x3f3f3f3f
#define LL long long
const int MOD = 1E9+7;
const int N = 1000000+5;
const int dx[] = {0,0,-1,1,-1,-1,1,1};
const int dy[] = {-1,1,0,0,-1,1,-1,1};
using namespace std;
int main() {
int n;
scanf("%d",&n);
LL a=1,b=1;
for(int i=1;i<=n;i++){
LL x,y;
scanf("%lld%lld",&x,&y);
LL percent=max(a/x,b/y);
while(true){
if(percent*x>=a&&percent*y>=b)
break;
percent++;
}
a=percent*x;
b=percent*y;
}
printf("%lld\n",a+b);
return 0;
}