博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【6.18校内test】T2分数线划定
阅读量:5315 次
发布时间:2019-06-14

本文共 1631 字,大约阅读时间需要 5 分钟。

这道题也不是什么难题,思路一带而过吧:

SOLUTION:

First.输入n,m,计算m*1.5的值,接着输入编号和成绩,然后我的做法是在输入编号成绩之后,开一个101大小的数组来记录某个分数段的人数(因为分数是0~100所以才敢这么干qwq大了就怂了)。

Second.使用最简单好用的sort进行排序,按照成绩从高到低排,如果成绩相同,编号小的在前面。

Third.进行分数线划定,这里喜欢用while(不会用for写这个的说),首先我们先选择恰为计划录取人数的150%(下取整)的人数,然后要注意的是每选择一个人就把这个人所代表的分数的d数组--;

然后计算到第m个人时,如果第m个人所对应的d数组不为0,那么说明还有相同分数的没有被选上,因此用当前记录到的cnt+=d[p[cnt].s];

Last.输出(这个不必多说)


自我感觉今天考场上写的代码比洛谷上交的思路要好(至少思路清晰)

附代码:

#include
#include
#include
#include
#include
#include
using namespace std;int n,m,cnt;int d[101];struct node { int k,s;}p[5010];bool cmp(node x,node y){ if(x.s==y.s) return x.k
y.s;}int main(){ scanf("%d %d",&n,&m); m*=1.5; for(int i=1;i<=n;i++) scanf("%d %d",&p[i].k,&p[i].s),d[p[i].s]++; sort(p+1,p+n+1,cmp); while(cnt<=m){ if(cnt==m) break; cnt++; d[p[cnt].s]--; } if(d[p[cnt].s]!=0) cnt+=d[p[cnt].s]; cout<
<<" "<
<
#include
using namespace std;int n,m,cnt[101],ans,sor,r;struct node{ int k,s;}p[5010];bool cmp(node x,node y){ if(x.s==y.s) return x.k
y.s;}int main(){ scanf("%d %d",&n,&m); int jh=m*1.5; for(int i=1;i<=n;i++) scanf("%d %d",&p[i].k,&p[i].s),cnt[p[i].s]++; sort(p+1,p+n+1,cmp); for(int i=1;i<=n;i++){ if(ans+1>jh) break; if(p[i-1].s==p[i].s) r++; if(p[i-1].s!=p[i].s) r=1; ans++; sor=p[i].s; } if(cnt[sor]!=r) ans+=(cnt[sor]-r); cout<
<<" "<
<
Luogu Code

end-

 

转载于:https://www.cnblogs.com/zhuier-xquan/p/11047068.html

你可能感兴趣的文章
【Quartz】常用方法的使用方式(三)
查看>>
MVVM模式下关闭窗口的实现
查看>>
C#区域截图——调用API截图
查看>>
c#与java中byte字节的区别及转换方法
查看>>
A WebBrowser Toy
查看>>
用MyXls生成Excel报表(C#)
查看>>
了解WP的传感器
查看>>
阅读笔记 火球——UML大战需求分析 2
查看>>
acedEvaluateLisp函数的反汇编
查看>>
Linux无线工具详解(Wireless tools for Linux)
查看>>
ACM PKU 2328 http://acm.pku.cn/JudgeOnline/problem?id=2328
查看>>
VB.NET 制作DLL动态库文件
查看>>
RSS阅读器
查看>>
微信电脑版不断崩溃
查看>>
js链式调用
查看>>
The connection to adb is down, and a severe error has occured
查看>>
数字统计
查看>>
20180620小测
查看>>
iptables设置规则
查看>>
聊聊setTimeout和setInterval线程
查看>>