zoukankan      html  css  js  c++  java
  • 题解 P1068 【分数线划定】

    由于涉及到排序和对应序号


    那就定义一个结构体

    结合STL模板中的sort日常沉迷sort

    提示:
    虽然我也是蒟弱

    sort是快速排序函数,有两个或三个参数,

    两个参数适用于平常的数字类型,即形sort(a+1,a+n+1);其中a是数组名;

    三个参数更多适用于自己定义的结构体,使用时形如sort(a+1,a+n+1,cmp);cmp是自己定义的bool型函数,用于判断;


    大体思路如下:
        
      1.定义一个结构体,令成绩具有**两种属性**,一是**学号**,二是**分数**;
     
      2.编辑一个cmp;用于判断,且优先级为成绩优先,其次学号;
     
      3.进入主函数;读入n,m。定义一个cj类型的数组aa;并且读入学号和分数;
     
      4.排序!!!使用sort一步到位(sort大法好)
     
      5.然后计算分数线(注意一定要多读几遍题,不要像我一样理解错题意)

      6.遍历一遍所有数据,定义一个计数器,累加及格人数;
     
      7.由于sort已经令数据有序了,就直接输出吧,反正人数已经求出来了2333




    #include<bits/stdc++.h>
    using namespace std;
    struct cj {
        int xh;
        int sum;
    };
    cj aa[20000];
    bool cmp (const cj &a,const cj &b){
        if(a.sum>b.sum) return 1;//注意不要等于
        if(a.sum<b.sum) return 0;
        if(a.xh>b.xh) return 0;
        if(a.xh<b.xh) return 1;
    
    }
    int main(){
        int m;
        int n;
        cin>>n>>m;
        int a,b;
        double m1=m;
        for(int i=1;i<=n;i++){
            cin>>a>>b;
            aa[i].sum=b;
            aa[i].xh=a;
        }
        sort(aa+1,aa+n+1,cmp);
        int p=floor(m1*1.5);
        int mm=aa[p].sum;
        cout<<mm<<" ";
        
        int cnt=0;
        for(int i=1;i<=n;i++){
            if(aa[i].sum>=mm) cnt++;
        }
        cout<<cnt<<endl;
        for(int i=1;i<=cnt;i++){
            cout<<aa[i].xh<<" "<<aa[i].sum<<endl;
        }
        return 0;
    }
    
  • 相关阅读:
    JavaScript访问ab页面定时跳转代码
    http协议相关-待续
    curl发送get和post请求
    Java入门——动态网页jsp(jdk下载和配置环境变量)
    LeetCode:Best Time to Buy and Sell Stock
    LeetCode:Reverse Integer
    LeetCode:Same Tree
    LeetCode:Single Number II
    LeetCode:Single Number
    LeetCode:Minimum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/luv-letters/p/8474701.html
Copyright © 2011-2022 走看看