链接:https://www.nowcoder.com/acm/contest/134/J
来源:牛客网
题目描述
铁子最近犯上了强迫症,他总是想要把一个序列里的元素变得两两不同,而他每次可以执行一个这样的操作,他可以选择序列里的任意两个元素相加,不妨记作ai和aj,然后把ai+aj放进序列里,再删掉ai和aj其中的随便一个,问最少操作多少次可以完成铁子的愿望?
输入描述:
第一行一个整数n表示序列的长度(1≤n≤105)
第二行n个整数ai表示序列的每个整数(1≤ai≤109)
输出描述:
输出一行表示答案
示例1
输入
复制
3
1 2 2
输出
复制
1
说明
将序列的第1个整数和序列的第2个整数相加,再删掉第2个整数。
又是一道不会做的题。。。
题解说的是答案就是数字总个数减去数字的总数(不重复的) 仔细想想好像有点道理,因为每一次操作都等于可以去掉一个相等的数 但是自己想的时候总是觉得情况很复杂 比如去完一个之后加起来的这个怎么考虑 讲道理还是太菜了
(注意要排序!)
代码:
#include <cstdio> #include <algorithm> using namespace std; const int MAXN=100050; int a[MAXN]; int main(void){ int n; int num=1; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&a[i]); } sort(a,a+n); for(int i=1;i<n;i++){ if(a[i]!=a[i-1]){ num++; } } printf("%d\n",n-num); return 0; }
文章来源: 牛客小白赛4J――强迫症