2007 NOIP 统计数字
来源:互联网 发布:cbox网络电视去广告版 编辑:程序博客网 时间:2024/06/08 06:15
1.统计数字
count.pas/c/cpp
【问题描述】某次科研调查时得到了n个自然数每个数均不超过1500000000(1.5*10^9)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
【输入】输入文件count.in包含n+1行,第一行是整数n表示自然数的个数 第2~n+1每行一个自然数。
【输出】输出文件count.out包含m行,m为n个自然数中不相同数的个数,按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。
输入:8 4 2 4 5 100 2 100
输出 :
2 3
4 2
5 1
100 2
通过数据限制我们可以看出,自然数的大小可能会特别大,所以就不适合使用像桶排这种标记数组的方法;
这题因为N的大小不是特别大,可以采用存储每个读入的数据,再排序,通过比较排序后的结果输出
附上代码:
#include<iostream>#include<algorithm>using namespace std;int a[50010],n,s=1;int main(){cin>>n;//输入自然数个数for(int i=1;i<=n;++i)cin>>a[i];//输入每个自然数sort(a+1,a+n+1);//快排for(int i=1;i<=n;++i){if(a[i]==a[i+1]) ++s;else{cout<<a[i]<<" "<<s<<endl;s=1;//重置计数器}}return 0;}
这题还可以用map容器,要注意end()指向的是最后一个元素的下一个元素
#include<map> #include<cstdio> #include<iterator> using namespace std; typedef map<int,int> M; int n; M c; int main() { scanf("%d",&n); for(int i=n;i>0;--i){ int x; scanf("%d",&x); ++c[x]; } for(M::iterator i=c.begin();i!=c.end();++i) printf("%d %d\n",i->first,i->second); return 0; }
阅读全文
2 0
- [NOIP 2007]统计数字
- 2007 NOIP 统计数字
- 2007年NOIP提高组 统计数字
- codevs 1164 || NOIP 2007 统计数字 模拟 解题报告
- 07noip 统计数字 解题报告
- 统计数字
- 统计数字
- 统计数字
- 统计数字
- 统计数字
- 统计数字
- 统计数字
- 统计数字
- 统计数字
- 统计数字
- 统计数字
- 2007年分区联赛提高组之一 统计数字
- 2007年分区联赛提高组之一 统计数字
- 杰克沃顿大神的 rxbinding框架
- 希腊字母表及读音
- Python collections模块总结
- RocketMQ存储篇——Config文件以及执行延迟消息的线程服务
- Codeblocks编辑器的设置
- 2007 NOIP 统计数字
- 请求JSON格式文件文件问题
- 背包九讲
- UNP 基于Epoll复用的回射服务器性能测试
- AngularJs:Service、Factory、Provider依赖注入使用与区别
- iOS绘图框架CoreGraphics分析
- pageX、pageY及父元素的页面坐标使提示框跟随鼠标移动
- [LeetCode] Reverse Words in a String
- 关于BigDecimal类型在jsp页面中进行除法运算问题