Soldier and Badges
2015-07-17 21:59
211 查看
题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=173144
题意:
输入n个数,要使这n个数都不相同,且只能加,输出最少要加的多少。
案例:
1)input
4
1 3 1 4
output
1
2)input
5
1 2 3 2 5
output
2
思路分析:
利用插空法。尽量减少循环。
先对数组进行排序,再找出有x个相同的数,且把相同的数存在另一个数组c中。因为这个数组c也是排序的,所以只要找出x个比c大的缺少的数。
最后,只要加上所有数组b中的数减去数组c中的数,就是所要输出的数。
源代码如下:
题意:
输入n个数,要使这n个数都不相同,且只能加,输出最少要加的多少。
案例:
1)input
4
1 3 1 4
output
1
2)input
5
1 2 3 2 5
output
2
思路分析:
利用插空法。尽量减少循环。
先对数组进行排序,再找出有x个相同的数,且把相同的数存在另一个数组c中。因为这个数组c也是排序的,所以只要找出x个比c大的缺少的数。
最后,只要加上所有数组b中的数减去数组c中的数,就是所要输出的数。
源代码如下:
#include<iostream> #include<algorithm> #define max 3000 using namespace std; int main() { int n,a[max],i,count=0,j=0,k,b[max],c[max],x=0; cin>>n; for(i=0;i<n;i++) cin>>a[i]; sort(a,a+n); k=a[0]; for(i=0;i<n;i++) if(a[i]==a[i+1]) { c[x]=a[i]; x++; } while(1) { for(i=j;i<n;i++) if(k==a[i]) break; if(i>=n) if(k>c[j]) { b[j]=k; j++; } if(j>=x) break; k++; } for(i=0;i<x;i++) count+=b[i]-c[i]; cout<<count<<endl; return 0; }
相关文章推荐
- CoreLocation 下的定位跟踪测速
- Oracle 定义变量总结
- 封存飞行器项目,解决老问题
- 10118 - Free Candies(DP)
- iOS 分享微信朋友圈
- ios调用系统导航
- Django笔记 —— 表单(form)
- Vmware虚拟机网络模式及虚拟机与物理机通信方法
- Vijos P1317开心的金明
- 初识MVC
- Session、Cookies简介本质
- MapKit地图划线
- 使用Eclipse构建Maven的SpringMVC项目
- 文章标题:Mnist数据集的读取
- linux内核升级图文攻略
- 使用Python2.7和火狐浏览器下载QQ空间好友相册
- ios 区域检测 使用coreLocation
- Java中流的分类
- C语言指针与二维数组
- cocos2d-x添加虚拟键盘获得用户输入CCTextField实例