C - AtCoDeerくんと選挙速報 / AtCoDeer and Election Report(模拟+贪心)

Problem Statement

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 NN times, and when he checked it for the ii-th (1≦i≦N)(1≦i≦N) time, the ratio was Ti:AiTi: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 NN-th time. It can be assumed that the number of votes obtained by each candidate never decreases.

Constraints

  • 1≦N≦10001≦N≦1000
  • 1≦Ti,Ai≦1000(1≦i≦N)1≦Ti,Ai≦1000(1≦i≦N)
  • TiTi and AiAi (1≦i≦N)(1≦i≦N) are coprime.
  • It is guaranteed that the correct answer is at most 10181018.

Input

The input is given from Standard Input in the following format:

NN
T1T1 A1A1
T2T2 A2A2
::
TNTN ANAN

Output

Print the minimum possible total number of votes obtained by Takahashi and Aoki when AtCoDeer checked the report for the NN-th time.


Sample Input 1 Copy

Copy

3
2 3
1 1
3 2

Sample Output 1 Copy

Copy

10

When the numbers of votes obtained by the two candidates change as 2,3→3,3→6,42,3→3,3→6,4, the total number of votes at the end is 1010, which is the minimum possible number.


Sample Input 2 Copy

Copy

4
1 1
1 1
1 5
1 100

Sample Output 2 Copy

Copy

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 Copy

Copy

5
3 10
48 17
31 199
231 23
3 2

Sample Output 3 Copy

Copy

6930

题意:有两个候选人。选举人进行投票,按先后知道每次两人的票数比例。问你最少有多少人参与投票:

这道题自己刚上来想错了和最小公倍数干上了,好在及时转变了思路:假设x,y分别为上一次(i-1轮)的两人的最少票数,如果

a[i]>=x&&b[i]>=y

x,y,的值保持不变。

其余的情况:求最小的倍数m,保证m*a[i]>=x&&m*b[i]>=y就行了;

代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a[1009];
ll b[1009];
ll gcd(ll a,ll b)
{
    return b==0?a:gcd(b,a%b);
}
ll lcm(ll a,ll b)
{
    return (a*b)/(gcd(a,b));
}
int main()
{
    int n;
    cin>>n;

    for(int i=1; i<=n; i++)
    {
        cin>>a[i]>>b[i];
    }
    ll x=1;
    ll y=1;
    cout<<endl;
    for(int i=1; i<=n; i++)
    {
        if(a[i]>=x&&b[i]>=y)
        {
            x=a[i];
            y=b[i];
            continue;
        }
        else if(a[i]<x&&b[i]<y)
        {
            ll s1=(x+a[i]-1)/a[i];
            ll s2=(y+b[i]-1)/b[i];
            ll m=max(s1,s2);
            x=a[i]*m;
            y=b[i]*m;
            continue;
        }
        else if(a[i]<x&&b[i]>=y)
        {
            ll m=(x+a[i]-1)/a[i];
            x=a[i]*m;
            y=b[i]*m;
            continue;
        }
        else if(a[i]>=x&&b[i]<y)
        {
            ll m=(y+b[i]-1)/b[i];
             x=a[i]*m;
             y=b[i]*m;
             continue;
        }
        //cout<<x<<" "<<y<<endl;
    }
 cout<<x+y<<endl;

}



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值