POJ 2182 Lost Cows
2016-06-27 22:23
211 查看
http://poj.org/problem?id=2182
Lost Cows
Time Limit: 1000MS Memory Limit: 65536K
题目大意:有N个数,除了第一个数之外,给出每一个数之前 比这个数小的数的个数。要求输出各个数分别是多少。
Sample Input
Sample Output
大致思路:从“0”突破:如果某个数给出的是“0”,就表示它是它及左边的数中最小的。因此,最右边的一个“0”就是所有数中最小的。
对数据进行n次搜索,每次找出最右边的“0”即可,找到后将这一位进行一定处理。
直接给出代码
Lost Cows
Time Limit: 1000MS Memory Limit: 65536K
题目大意:有N个数,除了第一个数之外,给出每一个数之前 比这个数小的数的个数。要求输出各个数分别是多少。
Sample Input
5 1 2 1 0
Sample Output
2 4 5 3 1
大致思路:从“0”突破:如果某个数给出的是“0”,就表示它是它及左边的数中最小的。因此,最右边的一个“0”就是所有数中最小的。
对数据进行n次搜索,每次找出最右边的“0”即可,找到后将这一位进行一定处理。
直接给出代码
//a[1]=0,不需要任何特殊讨论 //复杂度 O(n^2) ,764K 297MS #include<iostream> #include<cstdio> using namespace std; const int inf=8010,Max=0x7fffffff; int a[inf]={0}; //存储初始数据 int ans[inf],tot=0; //存储这一位应该填的数 int n; int main(){ cin>>n; for (int i=2;i<=n;i++) scanf("%d",&a[i]); for (int w=1;w<=n;w++){ //这个循环只是为了表示次数,随便起一个变量名字 int p0; //最右边0的位置 for (int i=n;i;i--) //从右往左找最右边的0 if (!a[i]) {p0=i;break;} ans[p0]=++tot; //p0位是当前未讨论的数中最小的 a[p0]=Max; //由于后面会有操作,这里赋最大值 for (int i=p0+1;i<=n;i++) a[i]--; /*重要:由于p0位是当前最小的数,所以p0之后的所有数的a数组值都会少1; 这也是为什么前面要给p0赋最大值。 这里也可以看出,每搜索一次,必然会搜到0,因此不必特殊讨论*/ } for (int i=1;i<=n;i++) printf("%d\n",ans[i]); return 0; }
相关文章推荐
- 我是运营,我没有假期
- 搜狗百度360市值齐跌:搜索引擎们陷入集体焦虑?
- 本人即将筹备败家日志,敬请期待!
- 书评:《算法之美( Algorithms to Live By )》
- IE:使用搜索助手
- 动易2006序列号破解算法公布
- DB2数据库的安装
- C#实现把指定数据写入串口
- “传奇”图象数据存储方式
- C#递归算法之分而治之策略
- Ruby实现的矩阵连乘算法
- 修复mysql数据库
- C#插入法排序算法实例分析
- C#算法之大牛生小牛的问题高效解决方法
- 浅析SQL数据操作语句
- SQLServer 数据导入导出的几种方法小结
- 简述MySQL分片中快速数据迁移
- MySQL数据备份之mysqldump的使用详解
- C#算法函数:获取一个字符串中的最大长度的数字
- 超大数据量存储常用数据库分表分库算法总结