【模拟】统计数字
2012-08-17 10:22
190 查看
题目:统计数字 rqnoj133
题目描述
某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。数据范围:
40%的数据满足:1<=n<=1000
80%的数据满足:1<=n<=50000
100%的数据满足:1<=n<=200000,每个数均不超过1500 000 000(1.5*109)
输入格式
输入包含n+1行;第一行是整数n,表示自然数的个数;
第2~n+1每行一个自然数。
输出格式
输出包含m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。样例输入
82
4
2
4
5
100
2
100
样例输出
2 34 2
5 1
100 2
题目不难,一次快排,然后依次扫描输出即可
C++代码
#include<cstdio> #include<string> using namespace std; #define MAXN 200000+10 int a[MAXN],n; void qs(int l,int r) { int i=l,j=r,x=a[i+(j-i)/2]; do { while(a[i]<x)i++; while(a[j]>x)j--; if(i<=j) { swap(a[i],a[j]); i++;j--; } } while(i<=j); if(i<r)qs(i,r); if(l<j)qs(l,j); } int main() { freopen("rqn133.in","r",stdin); freopen("rqn133.out","w",stdout); scanf("%d",&n); int i; for(i=1;i<=n;i++) scanf("%d",&a[i]); qs(1,n); //这里可以直接调用sort(a+1,a+1+n),速度也差不多 int k=a[1],sum=1; printf("%d ",k); for(i=2;i<=n;i++) { if(a[i]==k)sum++; else { k=a[i]; printf("%d\n%d ",sum,k); sum=1; } } printf("%d",sum); return 0; }
相关文章推荐
- 【模拟】统计数字
- 【模拟】【RQNOJ】统计数字
- 【模拟】洛谷 P1097 统计数字
- Vijos P1784 数字统计【模拟】
- codevs 1164 || NOIP 2007 统计数字 模拟 解题报告
- [模拟][NOIP2007] 统计数字
- 【模拟】洛谷 P1179 数字统计
- 数字逻辑练习题-(二进制/16进制模拟)
- 输入一行字符,分别统计出其中的英文字母,空格,数字和其他字符的个数
- 统计出其中英文字母、数字、空格和…
- java正则表达式统计字母和数字
- A: 统计数字
- 从终端获取一个字符串,分别统计当中大写字母、小写字母、数字及其他字符的个数。
- 从键盘输入10个0-9的整数,统计为1、2、3的数字和其他数字的个数
- noip2011 数字反转 (模拟)
- 第13周项目5-统计每一个数字字符出现的次数
- 第十三周 项目5(1):统计每个数字字符出现的次数
- lintcode-3-统计数字
- java实现输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
- 【模拟】洛谷 P1307 数字反转