• AtCoder Petrozavodsk Contest 001 B


    Time limit : 2sec / Memory limit : 256MB

    Score : 300 points

    Problem Statement

    You are given two integer sequences of length N: a1,a2,..,aN and b1,b2,..,bN. Determine if we can repeat the following operation zero or more times so that the sequences a and b become equal.

    Operation: Choose two integers i and j (possibly the same) between 1 and N (inclusive), then perform the following two actions simultaneously:

    • Add 2 to ai.
    • Add 1 to bj.

    Constraints

    • 1≤N≤10 000
    • 0≤ai,bi≤109 (1≤iN)
    • All input values are integers.

    Input

    Input is given from Standard Input in the following format:

    N
    a1 a2 .. aN
    b1 b2 .. bN
    

    Output

    If we can repeat the operation zero or more times so that the sequences a and b become equal, print Yes; otherwise, print No.


    Sample Input 1

    Copy
    3
    1 2 3
    5 2 2
    

    Sample Output 1

    Copy
    Yes
    

    For example, we can perform three operations as follows to do our job:

    • First operation: i=1 and j=2. Now we have a={3,2,3}, b={5,3,2}.
    • Second operation: i=1 and j=2. Now we have a={5,2,3}, b={5,4,2}.
    • Third operation: i=2 and j=3. Now we have a={5,4,3}, b={5,4,3}.

    Sample Input 2

    Copy
    5
    3 1 4 1 5
    2 7 1 8 2
    

    Sample Output 2

    Copy
    No
    

    Sample Input 3

    Copy
    5
    2 7 1 8 2
    3 1 4 1 5
    

    Sample Output 3

    Copy
    No

    如果a[i]>b[i],就需要a[i]-b[i]个b[i] + 1 操作,如果a[i] < b[i],就需要(a[i] - b[i])/2个a[i] + 2操作与其他的b[j] + 1操作进行组合,比如a[i] = 1,b[i] = 6,就需要2个第二种操作,加完后a[i]为5,比6差1,只需要a[i],b[i]同时再做一个操作就可以。根据题意需要第二个操作不少于第一个操作,才能保证两个操作一齐进行。
    代码:
    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <iomanip>
    using namespace std;
    int n;
    long long a[10000],b[10000];
    long long z,f;
    int main()
    {
        cin>>n;
        for(int i = 0;i < n;i ++)
        {
            cin>>a[i];
        }
        for(int i = 0;i < n;i ++)
        {
            cin>>b[i];
            if(b[i] - a[i] < 0)f += a[i] - b[i];
            else if(b[i] - a[i] > 0)z += (b[i] - a[i]) / 2;
        }
        if(z >= f)cout<<"Yes";
        else cout<<"No";
    }
  • 相关阅读:
    安卓系统的文件管理神器Solid Explorer(v2.2)
    地月距离竟然如此遥远
    Android在争议中逃离Linux内核的GPL约束【转】
    gearman
    PHP基础学习
    函数式编程
    有向图的实现
    无向图的实现
    百度地图API获取数据
    python队列的实现
  • 原文地址:https://www.cnblogs.com/8023spz/p/8413441.html
Copyright © 2020-2023  润新知