【模拟】洛谷 P1097 统计数字
2017-05-06 09:53
330 查看
题目描述
某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。输入输出格式
输入格式:输入文件count.in包含n+1行;
第一行是整数n,表示自然数的个数;
第2~n+1每行一个自然数。
输出格式:
输出文件count.out包含m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。
输入输出样例
输入样例#1:8
2
4
2
4
5
100
2
100
输出样例#1:
2 3
4 2
5 1
100 2
说明
40%的数据满足:1<=n<=100080%的数据满足:1<=n<=50000
100%的数据满足:1<=n<=200000,每个数均不超过1500 000 000(1.5*109)
NOIP 2007 提高第一题
代码
#include<iostream> using namespace std; long long a[200005],temp[200005]; void mergesort(int left,int right) { if(left==right)return ; int mid=(left+right)/2; mergesort(left,mid); mergesort(mid+1,right); int i=left,j=mid+1,k=left; while(i<=mid&&j<=right) { if(a[i]>a[j])temp[k++]=a[j++]; else temp[k++]=a[i++]; } while(i<=mid)temp[k++]=a[i++]; while(j<=right)temp[k++]=a[j++]; for(int m=left;m<=right;m++)a[m]=temp[m]; } int main() { int n; cin>>n; for(int i=0;i<n;i++)cin>>a[i]; mergesort(0,n-1); int sum=1; cout<<a[0]; long long x=a[0]; for(int i=1;i<n;i++) { if(a[i]==x)sum++; else { cout<<' '<<sum<<endl; cout<<a[i]; x=a[i]; sum=1; } } cout<<' '<<sum; return 0; }
相关文章推荐
- 洛谷 P1097 统计数字
- 【模拟】洛谷 P1179 数字统计
- 洛谷 P1097 统计数字
- [NOIP2007] 提高组 洛谷P1097 统计数字
- 洛谷—— P1097 统计数字
- [模拟][NOIP2007] 统计数字
- P1097 统计数字
- 【模拟】洛谷 P1307 数字反转
- 洛谷-统计数字-NOIP2007提高组复赛
- codevs 1164 || NOIP 2007 统计数字 模拟 解题报告
- 洛谷——P1179 数字统计
- 【模拟】洛谷 P1427 小鱼的数字游戏
- 洛谷 P1308 统计单词数【字符串+模拟】
- 【题解】洛谷 P1179数字统计 NOIPpj 数字统计
- NOIP2010第二题 ---数字统计(摘自洛谷题解)
- 【模拟】【RQNOJ】统计数字
- Vijos P1784 数字统计【模拟】
- 【模拟】统计数字
- 【模拟】统计数字
- (ssl1063)P1097 2007年分区联赛提高组之一 统计数字