zoukankan      html  css  js  c++  java
  • 【6.18校内test】T2分数线划定

    分数线划定【题目链接】

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

    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-

  • 相关阅读:
    linux ---用uniq实现文件的并集和交集
    vim的.vimrc文件设置
    CURL常用命令
    快速入门系列--MVC--03控制器和IOC应用
    linux下git安装
    openerp child_of操作符深度解析
    apache2 + virtualenv +djangocms
    django-cms安装
    pycharm3.4 下svn 项目checkout&配置
    在django项目外,使用django.db链接数据库(postgres)
  • 原文地址:https://www.cnblogs.com/zhuier-xquan/p/11047068.html
Copyright © 2011-2022 走看看