题目链接:http://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1898
Description
985有n个数,已知每次操作可以将其中不相同的两个数一个加一、一个减一,操作次数不限。
问他最多可以得到多少个相同的数。
Input
第一行输入一个整数t,代表有t组测试数据。
每组数据占两行,第一行输入一个n代表元素个数,下面一行输入n个整数a[]。
注:1 <= t <= 30,1 <= n <= 1e4,1 <= a[] <= 1e3。
Output
输出一个整数代表最多可以得到多少个相同的数。
Sample Input
2 3 1 1 1 2 2 3
Sample Output
3 1
HINT
Source
analyse:
1>若所给序列中的数字和能够被n平分,那么在若干次加减后最后一定能变成n个相同的数.
2>否则就可以找到一个数充当替罪羊,让另外n-1个数和替罪羊加或减变成同一个数.
#include <cstdio> #include <cstring> #include<iostream> #include<queue> #include<stack> #include<cmath> #include <map> #include <algorithm> using namespace std; const int maxn=1100; const int INF=0x3f3f3f3f; int main() { int T; scanf("%d", &T); while(T--) { int n; scanf("%d", &n); int num, sum=0; for(int i=0; i<n; i++) { scanf("%d", &num); sum+=num; } if(sum%n==0) printf("%d ", n); else printf("%d ", n-1); } return 0; }