題解 P1068 【分數線劃定】
阿新 • • 發佈:2018-02-26
floor brush highlight 序號 IT 定義 text 編輯 pre
5.然後計算分數線(註意一定要多讀幾遍題,不要像我一樣理解錯題意)
6.遍歷一遍所有數據,定義一個計數器,累加及格人數;
7.由於sort已經令數據有序了,就直接輸出吧,反正人數已經求出來了2333
由於涉及到排序和對應序號
那就定義一個結構體
結合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; }
題解 P1068 【分數線劃定】