AtCoder gc009 A Multiple Array

来源:互联网 发布:大学生心理普查数据 编辑:程序博客网 时间:2024/06/14 06:49

A - Multiple Array


時間制限 : 2sec / メモリ制限 : 256MB

配点 : 300 点

問題文

N 項からなる数列 A1,…,AN があり、N 個のボタンがあります。 i(1≦iN) 個目のボタンを押すと、数列 A の 1 項目から i 項目までの値が 1 ずつ増加します。

数列 B1,…,BN が与えられます。高橋君は、これらのボタンを何回か押して、すべての i に対し、Ai が Bi の倍数になるようにします。

高橋君がボタンを押す回数の最小値を求めてください。

制約

  • 入力はすべて整数である。
  • 1≦N≦105
  • 0≦Ai≦109(1≦iN)
  • 1≦Bi≦109(1≦iN)

入力

入力は以下の形式で標準入力から与えられる。

NA1 B1:AN BN

出力

高橋君がボタンを押す回数の最小値を表す整数を出力せよ。


入力例 1

Copy
33 52 79 4

出力例 1

Copy
7

1 つめのボタンを 2 回、2 つめのボタンを 2 回、3 つめのボタンを 3 回押せばよいです。


入力例 2

Copy
73 14 15 92 65 35 89 7

出力例 2

Copy
22
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>using namespace std;int n,m,x;const int maxn = 1e5+10;long long gcd(long long a, long long b){    return a == 0 ? b : gcd(b % a, a);}long long a[maxn],b[maxn];int main(){    long long i,j,k;    long long ans;    long long now;    long long comm;    while(~scanf("%d",&n)){        ans = 0;        now = 0;        for(i=1;i<=n;i++){            scanf("%lld%lld",&a[i],&b[i]);        }                for(i=n;i>=1;i--){            a[i] += ans;            for(j=a[i]/b[i];;j++){                if(j*b[i]>=a[i]){                    break;                }            }            comm = j*b[i] - a[i];            ans += comm;        }        printf("%lld\n",ans);    }    }








0 0