• 复杂模拟 | 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;
    }
  • 相关阅读:
    identityser4 samesit 问题
    mysql 8 root密码重置
    OutSystems学习笔记。
    获取两个List中的不同元素,4种方法,逐步优化,学习使用
    java 配置在.properties文件中的常量
    java POST 传值 加签 验证
    springboot jpa 多条件查询(多表)
    java代码行数统计工具类
    Map集合遍历的4种方法
    springboot jpa 多条件查询(单表)
  • 原文地址:https://www.cnblogs.com/TQCAI/p/8579167.html
Copyright © 2020-2023  润新知