牛客--2019搜狐畅游--分玩具

题目描述:
幼儿园里有有M个小朋友在课件玩耍,每个人手中现有ni个玩具。为了公平起见,老师需要让每个小朋友手中有相同数量的玩具。假设老师每次只能从一个人手中拿走两个玩具并给另一个小朋友。求老师最少需要做多少次这样的玩具转移。如果不存在可行的方案则输出-1。
(注意超大数据)
输入描述:
每个输入包含一个测试用例。每个测试用例的第一行包含一个整数M(1 <= M<= 100),接下来的一行包含M个整数ni(1 <= ni <= 100)。
输出描述:
输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出-1。
输入:
4
7 15 9 5
2
3 6
输出:
3
-1
题意:
题目描述
题解

  1. 首先判断玩具总数sum能否被n整除,不能整除输出-1返回
  2. 然后每次只能拿两个,就要计算ave和每一个的差值,如果非偶数就-1
  3. 结果要/2一下
    代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;

const int maxn = 100 + 5;
int a[maxn];

int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
        int sum = 0;
        for(int i = 0; i < n; i ++){
            scanf("%d",&a[i]);
            sum += a[i];
        }
        if(sum % n != 0){
            printf("-1\n");
        }
        else{
            int ave = sum / n;
            int ans = 0;
            bool flag = true;
            for(int i = 0; i < n; i ++){
                if((ave - a[i]) % 2 != 0){
                    flag = false;
                    break;
                }
                else{
                    ans += abs(ave - a[i]) / 2;
                }
            }
            if(flag) printf("%d\n",ans / 2);
            else printf("-1\n");
        }
    }
    return 0;
}

发布了228 篇原创文章 · 获赞 1 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/Ypopstar/article/details/105149896