【洛谷题单算法1-2】P1271\P1177\P1923\P1059\P1093
创始人
2025-05-30 01:08:56
0

P1271 【深基9.例1】选举学生会

题目描述

学校正在选举学生会成员,有 n(n≤999)n(n\le 999)n(n≤999) 名候选人,每名候选人编号分别从 1 到 n,现在收集到了 m(m<=2000000)m(m<=2000000)m(m<=2000000) 张选票,每张选票都写了一个候选人编号。现在想把这些堆积如山的选票按照投票数字从小到大排序。

输入格式

输入 n 和 m 以及 m 个选票上的数字。

输出格式

求出排序后的选票编号。

输入输出样例

输入

5 10
2 5 2 2 5 2 2 2 1 2

输出

1 2 2 2 2 2 2 2 5 5

代码如下

#include
using namespace std;
int a[1010];
int main(){int n,m,i,j,x;cin>>n>>m;for(i=1; i<=m; i++){  //输入投票数据 cin>>x;a[x]+=1;} for(i=1; i<=n; i++){    //n个学生,每个学生相当于一个桶 for(j=1; j<=a[i]; j++){  //每个学生的投票数 cout<

P1177 【模板】快速排序

题目描述

利用快速排序算法将读入的 N 个数从小到大排序后输出。

快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++ 选手请不要试图使用 STL,虽然你可以使用 sort 一遍过,但是你并没有掌握快速排序算法的精髓。)

输入格式

第 1 行为一个正整数 N,第 2 行包含 N 个空格隔开的正整数 aia_iai​ ,为你需要进行排序的数,数据保证了 aia_iai​ 不超过 10910^9109 。

输出格式

将给定的 N 个数从小到大输出,数之间空格隔开,行末换行且无空格。

输入输出样例

输入

5
4 2 4 5 1

输出

1 2 4 4 5

代码如下

#include
using namespace std;
const int MAXN=100000010;
int a[MAXN];
int i,j,l,r;   //l左边界  r右边界 
int n,flag,temp;void qsort(int a[], int l, int r){i=l,j=r,flag=a[(i+j)/2];do{while(a[i]flag) j--;  //找到第一个不大于flag的数 if(i<=j){temp=a[i],a[i]=a[j],a[j]=temp;i++,j--;}}while(i<=j);if(lcin>>n;for(i=1; i<=n; i++){  //输入投票数据 cin>>a[i];} qsort(a,1,n);for(i=1; i<=n; i++){    //n个学生,每个学生相当于一个桶 cout<

P1923 【深基9.例4】求第 k 小的数

题目描述

输入 n(1≤n<50000001 \le n < 50000001≤n<5000000 且 n 为奇数)个数字 aia_iai​ (1≤ai<1091 \le a_i < {10}^91≤ai​<109 ),输出这些数字的第 k 小的数。最小的数是第 0 小。

输入输出样例

输入

5 1
4 3 2 1 5

输出

2

代码如下

#include
using namespace std;int a[5000005];
int i,j,l,r;   
int n,k,flag,temp,ans;
inline int read(){//快速读入   
//加快程序运行效率,调用函数实际上是在内存调用。加上inline编译时,会写进主函数。 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;
}
void qqsort(int l,int r){i=l,j=r,flag=a[(i+j)/2];do{while(a[i]flag) j--;if(i<=j){temp=a[i],a[i]=a[j],a[j]=temp;i++,j--;}}while(i<=j);if(k+1<=j) qqsort(l,j);  //第k小的数字在左侧区间  位置从0开始 else if(k+1>=i) qqsort(i,r);//第k小的数字在右侧区间 else cout<cin>>n>>k;  //n为数据个数,k为第k小的数 for(i=1; i<=n; i++) {a[i]=read();}qqsort(1,n);return 0;
}

P1059 [NOIP2006 普及组] 明明的随机数

题目描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 N 个 1 到 1000 之间的随机整数 (N≤100)(N\leq100)(N≤100) ,对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

输入格式

输入有两行,第 1 行为 1 个正整数,表示所生成的随机数的个数 N。

第 2 行有 N 个用空格隔开的正整数,为所产生的随机数。

输出格式

输出也是两行,第 1 行为 1 个正整数 M,表示不相同的随机数的个数。

第 2 行为 M 个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

输入输出样例

输入

10
20 40 32 67 40 20 89 300 400 15

输出

8
15 20 32 40 67 89 300 400

代码如下

#include 
using namespace std;
int n,a[1010];
int i,x,cnt;
//输入数据范围为[1,1000] 
int main(){cin>>n;for(i=1; i<=n; i++){cin>>x;a[x]+=1;}for(i=1; i<=1000; i++){  //统计不重复数据的个数 if(a[i] != 0) cnt++;}cout<if(a[i] != 0) cout<

P1093 [NOIP2007 普及组] 奖学金

题目描述

某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前 5 名学生发奖学金。期末,每个学生都有 3 门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的。

任务:先根据输入的 3 门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。注意,在前 5 名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分) 是:

777 279279279
555 279279279

这两行数据的含义是:总分最高的两个同学的学号依次是 7 号、55 号。这两名同学的总分都是 279 (总分等于输入的语文、数学、英语三科成绩之和) ,但学号为 7 的学生语文成绩更高一些。如果你的前两名的输出数据是:

555 279279279
777 279279279

则按输出错误处理,不能得分。

输入格式

共 n+1行。

第 1 行为一个正整数n(≤300)n ( \le 300)n(≤300) ,表示该校参加评选的学生人数。

第 2 到 n+1 行,每行有 3 个用空格隔开的数字,每个数字都在 0 到 100 之间。第 j 行的 3 个数字依次表示学号为 j−1j−1j−1 的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为 1∼n1\sim n1∼n(恰好是输入数据的行号减 1)。

输出格式

共 5 行,每行是两个用空格隔开的正整数,依次表示前 5 名学生的学号和总分。

输入输出样例

输入

6
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98

输出

6 265
4 264
3 258
2 244
1 237

代码如下

#include 
using namespace std;int n,i,j,temp;struct student{int chi,math,eng,id,sumn;
}stu[310];int main(){cin>>n;for(i=1; i<=n; i++){cin>>stu[i].chi>>stu[i].math>>stu[i].eng;stu[i].id=i;stu[i].sumn=stu[i].chi+stu[i].math+stu[i].eng;}for(i=1; i<=n; i++){for(j=1; j<=n-i; j++){if(stu[j].sumnstu[j+1].id)swap(stu[j],stu[j+1]);}}for(i=1; i<=5; i++){cout<

相关内容

热门资讯

银行职工因贪污罪获刑后留任,在... 新京报记者 刘锦涵 制作 礼牧周 ▲新京报我们视频出品(ID:wevideo) 近日,农发行福建福鼎...
黄金创40年来最大单日跌幅!金... (来源:劳动报) 转自:劳动报 1月31日,国际金银价格同步大跌,创40余年来最大跌幅。国内金饰价...
“一人公司”近来何以兴起? 2026年开年,“一人公司”发展备受关注。这种新型创业模式正在上海、北京、江苏等地悄然兴起,凭借低成...
寒武纪预计 2025 年净利润... 消息,AI 芯片企业寒武纪今日发布 2025 年年度业绩预告: 经财务部门初步测算,公司预计 2...
和讯投顾徐剑波:ETF买入法! 这轮牛市是机构主导的ETF牛市,选对ETF往往比选股更加赚钱。那么如何投资ETF?今天教给大家一个非...
君乐宝上市申请已递交,国内乳品... 2026年 1月19日,中国领先的综合乳制品企业君乐宝乳业集团股份有限公司正式向香港联交所递交主板上...
大涨!马斯克,突传大消息!重磅... SpaceX的“赚钱能力”曝光。 据最新消息,世界首富埃隆·马斯克旗下的商业航天公司SpaceX去年...
原创 顶... 2025年微博之夜定档于2026年2月5日北京线上直播,这场已经走过二十多年风雨的互联网年度盛典,因...
体检查出肺结节?3个日常行为正... 太原龙城中医医院科普:如今越来越多人在体检中发现肺结节,看到报告上的“阴影”便忧心忡忡。其实研究表明...
记者观察丨美联储下任主席提名揭... 在经过长达一年反复挑选后,美国总统唐纳德·特朗普终于做出决定,提名凯文·沃什为下一任美联储主席,接替...
首饰金,一夜大跌上百元!金价暴... 【导读】多家首饰品牌金价出现大幅下跌 中国基金报记者 忆山 随着国际金价急速下跌,国内首饰金价也迎来...
原创 一... 一个亲自参观过我国稀土提炼工厂的日本人在社交平台发文,竟然毫不客气地指出,无论是日本还是美国,都几乎...
环球网财经系列专访 1月27日至28日,全国贸促工作会议暨中国贸促会第六届全国委员会第六次会议在京召开。 会议指出,“...
默茨警告:“大国世界”要来了,... 【文/观察者网 熊超然】当地时间1月29日,德国总理默茨在德国联邦议院发表其任内的第二次施政声明。在...
路透解析“马斯克集团”:Spa... SpaceX 凤凰网科技讯 北京时间1月31日,据路透社报道,长期以来,埃隆·马斯克(Elon Mu...
启动“二改” 永辉在京完成21... 北京商报讯(记者 赵述评 实习记者 毛思怡)1月31日,永辉超市北京龙湖长楹天街店经一个多月闭店调改...
《宜宾散装白酒连锁经营规范》团... 近日,由宜宾市酒类协会牵头归口、宜宾安宁酒厂主导起草,四川谊宾酒业、宜宾学院、劲牌南溪酒业等多家本地...
印度牙医博士打造全印首款人形机... 2026 年 1 月 23 日,印度浦那的 Muks Robotics 正式宣布,自主研发的社交人形...
金银价创新高,引发全球“贵金属... 【环球时报记者 倪浩 环球时报特约记者 甄翔】连日来,国际市场金银价格持续大涨。1月29日当天,亚太...
财经观察丨“爱你老己”背后的消... 新华网北京1月31日电岁末年初,一句“爱你老己,明天见”席卷社交网络,成为年轻人自我关怀的新表达。热...