6.18校内testT2分数线划定

Posted zhuier-xquan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6.18校内testT2分数线划定相关的知识,希望对你有一定的参考价值。

分数线划定【题目链接】

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

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<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>

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.k;
    return x.s>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<<p[cnt].s<<" "<<cnt<<endl;
    for(int i=1;i<=cnt;i++)
      cout<<p[i].k<<" "<<p[i].s<<endl;
    return 0;
 
技术图片
#include<bits/stdc++.h>

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.k;
    return x.s>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<<sor<<" "<<ans<<endl;
    for(int i=1;i<=ans;i++)
      cout<<p[i].k<<" "<<p[i].s<<endl;
Luogu Code

end-

 

以上是关于6.18校内testT2分数线划定的主要内容,如果未能解决你的问题,请参考以下文章

P1068 分数线划定

Luogu 1068 - 分数线划定 - [快速排序]

1.10编程基础之简单排序_05分数线划定

洛谷 P1068 分数线划定 题解

(排序)P1068 分数线划定

题解 P1068 分数线划定