NOIP200701奖学金 |
难度级别:A; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B |
试题描述
|
某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。
先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,
如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的。
任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。
注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。
例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分) 是:
7279 5279 这两行数据的含义是:总分最高的两个同学的学号依次是7号、5号。 这两名同学的总分都是 279 (总分等于输入的语文、数学、英语三科成绩之和) , 但学号为7的学生语文成绩更高一些。如果你的前两名的输出数据是: 5279 7279 则按输出错误处理,不能得分。 |
输入
|
包含n+1行: 第1行为一个正整数n,表示该校参加评选的学生人数。
第2到n+1行,每行有3个用空格隔开的数字,每个数字都在O到100之间z第1行的3个数 字依次表示学号为j-1的学生的语文、数学、英语的成绩。
每个学生的学号按照输入顺序编号为l~n (恰好是输入数据的行号减1)。
所给的数据都是正确的,不必检验。 |
输出
|
共有5行,每行是两个用空格隔开的正整数,依次表示前5名学生的学号和总分。
|
输入示例
|
【输入样例1】
6 90 67 80 87 66 91 78 89 91 88 99 77 67 89 64 78 89 98 【输入样例2】 8 80 89 89 88 98 78 90 67 80 87 66 91 78 89 91 88 99 77 67 89 64 78 89 98 |
输出示例
|
【输出样例1】 |
其他说明
|
【限制】50%的数据满足:各学生的总成绩各不相同 100%的数据满足: 6<=n<=300
|
呵呵,典型暴力,我又一次呵呵的笑了,又用暴力A过了。。
#include<iostream> using namespace std; struct data { int x,y,z,sum,id; }; int read() { ,f=;char ch=getchar(); ') { ; ch=getchar(); } ') { x=x*+ch-'; ch=getchar(); } return x*f; } ; data a[maxn]; int main() { int n=read(); ;i<n;i++) { a[i].y=read(); a[i].x=read(); a[i].z=read(); a[i].sum=a[i].x+a[i].y+a[i].z; a[i].id=i+; } ;i<n;i++) { ;j<n;j++) { if(a[i].sum<a[j].sum) { swap(a[i].id,a[j].id); swap(a[i].sum,a[j].sum); swap(a[i].x,a[j].x); swap(a[i].y,a[j].y); swap(a[i].z,a[j].z); } else if((a[i].sum==a[j].sum) && (a[i].y<a[j].y)) { swap(a[i].id,a[j].id); swap(a[i].sum,a[j].sum); swap(a[i].x,a[j].x); swap(a[i].y,a[j].y); swap(a[i].z,a[j].z); } else if((a[i].sum==a[j].sum) && (a[i].y==a[j].y) && (a[i].id>a[j].id)) { swap(a[i].id,a[j].id); swap(a[i].sum,a[j].sum); swap(a[i].x,a[j].x); swap(a[i].y,a[j].y); swap(a[i].z,a[j].z); } } } ;i<;i++)cout<<a[i].id<<" "<<a[i].sum<<endl; ; }
NOIP200705统计数字 |
难度级别:A; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B |
试题描述
|
某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
|
输入
|
包含n+1行; 第一行是整数n,表示自然数的个数; 第2~n+1每行一个自然数。
|
输出
|
包含m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。
|
输入示例
|
8 2 4 2 4 5 100 2 100
|
输出示例
|
2 3 4 2 5 1 100 2
|
其他说明
|
【限制】40%的数据满足:1<=n<=1000;80%的数据满足:1<=n<=50000;100%的数据满足:1<=n<=200000,每个数均不超过1500 000 000(1.5*10^9)
|
呵呵,还是暴力,我又笑了。。。又用暴力A过了。。。
#include<iostream> using namespace std; int read() { ,f=;char ch=getchar(); ') { ; ch=getchar(); } ') { x=x*+ch-'; ch=getchar(); } return x*f; }int main() { int n=read(); int a[n]; ;i<n;i++)a[i]=read(); sort(a,a+n); ; ;i<n;i++) { ]) { printf(],temp); temp=; } ])temp++; } printf(],temp); ; }
暴力无敌。。。。