妈的智障
#include <stdio.h> #include <memory.h> #include <math.h> #include <string> #include <vector> #include <set> #include <stack> #include <queue> #include <algorithm> #include <map> #define I scanf #define OL puts #define O printf #define F(a,b,c) for(a=b;a<c;a++) #define FF(a,b) for(a=0;a<b;a++) #define FG(a,b) for(a=b-1;a>=0;a--) #define LEN 1010 #define MAX (1<<30)+1 #define V vector<int> using namespace std; int N,M,K; struct Student{ int Ge,Gi,Gp,rank,id; int choice[10]; }; Student info[40010]; bool cmp(Student a,Student b){ if(a.Gp!=b.Gp) return a.Gp>b.Gp; return a.Ge>b.Ge; } int lastRank[110]; int quota[110]; vector<int> output[110]; int main(){ // freopen("1080.txt","r",stdin); int i,j; I("%d%d%d",&N,&M,&K); FF(i,M) I("%d","a[i]); FF(i,N){ I("%d%d",&info[i].Ge,&info[i].Gi); info[i].Gp=(info[i].Ge+info[i].Gi); info[i].id=i; FF(j,K){ I("%d",&info[i].choice[j]); } } //info[0].choice[2] sort(info,info+N,cmp); int curRank=0; info[i].rank=0; F(i,1,N){ if(info[i].Gp==info[i-1].Gp && info[i].Ge==info[i-1].Ge){ // info[i].rank=curRank; }else{ curRank++; } info[i].rank=curRank; } FF(i,N) { //学生 bool ok=0; FF(j,K){ //志愿 int c=info[i].choice[j]; //学校 if(quota[c]>0){ quota[c]--; output[c].push_back(info[i].id); lastRank[c]=info[i].rank; ok=1; } else if(quota[c]==0){ if(lastRank[c]==info[i].rank){ output[c].push_back(info[i].id); ok=1; } } if(ok) break; } } //输出每个学校录取的人 FF(i,M){ sort(output[i].begin(),output[i].end()); int sz=output[i].size(); FF(j,sz){ O("%d",output[i][j]); if(j!=sz-1) O(" "); } puts(""); } return 0; }