牛客小白赛4J――强迫症

匿名 (未验证) 提交于 2019-12-03 00:29:01

链接: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; }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!