codevs 1164 || NOIP 2007 统计数字 模拟 解题报告
2017-09-29 14:44
337 查看
题目描述 Description
某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109)。已知不相同的数不超过10000 个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统
计结果。
输入描述 Input Description
第1行是整数n,表示自然数的个数。第2~n+1 行每行一个自然数。
输出描述 Output Description
输出包含m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。
样例输入 Sample Input
82
4
2
4
5
100
2
100
样例输出 Sample Output
2 34 2
5 1
100 2
数据范围及提示 Data Size & Hint
【限制】40%的数据满足:1<=n<=1000
80%的数据满足:1<=n<=50000
100%的数据满足:1<=n<=200000,每个数均不超过1 500 000 000(1.5*10^9)
思路
水的不行,十分钟。可以用map更简单。
我直接模拟的。
代码
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath> #include<vector> using namespace std; const int N=200000+5; int n,line ,tot=1; int read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();} while(ch>='0'&&ch<='9') {x=x*10+ch-'0';ch=getchar();} return x*f; } int main() { n=read(); for (int i=1;i<=n;i++) line[i]=read(); sort(line+1,line+n+1); printf("%d ",line[1]); if (n==1) printf("1"); else { for (int i=2;i<=n;i++) { if (line[i]==line[i-1]) tot++; else {printf("%d\n",tot);printf("%d ",line[i]);tot=1;} if (i==n) printf("%d\n",tot); } } return 0; }
相关文章推荐
- 07noip 统计数字 解题报告
- Codevs 3287 NOIP2013提高组 货车运输(重庆一中高2018级信息学竞赛测验2) 解题报告
- 【NOIP2000TG/codevs1017】 乘积最大 解题报告
- codevs 3287||NOIP 2013 货车运输 最大生成树+倍增 解题报告
- [NOIP模拟][dp][codevs]p1401逆序对统计
- CodeVS1399 酗酒的狱警 解题报告【模拟+找规律】
- 全国信息学奥林匹克联赛(NOIP2010)复赛 1.数字统计 解题报告
- CodeVS3327 选择数字 解题报告【单调队列优化DP】
- CodeVS 1090 [NOIP 2003] 区间DP 解题报告
- codevs 2622 数字序列 DP 解题报告
- 【map练习】【map+模拟】codevs1164 统计数字题解
- codevs 1098 均分纸牌 模拟 解题报告
- [模拟][NOIP2007] 统计数字
- codevs 1126 数字统计 2010年NOIP全国联赛普及组 x
- codevs 1198 NOIP 2012 国王的游戏 高精度 解题报告
- codevs 1052 地鼠游戏 堆优化贪心 解题报告
- codevs 1253 超级市场 DP 解题报告
- 1068统计数字解题报告
- NOIP 2001统计单词个数 解题报告(记忆化搜索)
- 划分型动态规划 之 CODE[VS] 1040 统计单词个数 2001年NOIP全国联赛提高组