【模拟】统计数字
2012-11-06 18:33
197 查看
题目:统计数字 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; }
相关文章推荐
- 【模拟】洛谷 P1179 数字统计
- 【模拟】统计数字
- 【模拟】【RQNOJ】统计数字
- Vijos P1784 数字统计【模拟】
- 【模拟】洛谷 P1097 统计数字
- codevs 1164 || NOIP 2007 统计数字 模拟 解题报告
- [模拟][NOIP2007] 统计数字
- 软件体系结构课程设计:词频统计程序(包含英文单词和数字double,int)
- 1132:数字字符统计
- p279_1016在字符串有数字与非字符,找出连续的数字作为整数存放并统计个数。方法简洁,不同于答案书
- 统计一个数字在排序数组中出现的次数
- Android之模拟时钟和数字时钟,计时器
- UVa 1225 Digit Counting(数字统计)
- 7909:统计数字
- #输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
- C语言:编写一个程序统计输入字符串中,各个数字、空白字符、以及其他所有字符出现的次数。
- 关于统计数字问题的算法
- 【C语言】编写一个程序统计输入字符串中: 各个数字、空白字符、以及其他所有字符出现的次数。
- 写一个函数,计算40亿以内的最大的那个f(n)=n的值,函数f的功能是统计0到n之间所有数字1的数字和
- JavaScript中模拟java的map键值统计一段英文中各个单词出现的次数