复杂模拟 | 1095 模拟N个学生有K个志愿填M个学校

妈的智障

#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",&quota[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;
}
原文地址:https://www.cnblogs.com/TQCAI/p/8579167.html