题意
hh
思路
一个个枚举计算结点,check,记得排序,map套set减少时间复杂度
代码
分数:100
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| #include <bits/stdc++.h>
using namespace std; typedef long long LL; typedef pair<int,int> PII; int n,m,l,g,f,a,na,pa,paa,paar; int dtq[1010]; unordered_set<int> qtd[1010]; map<int,unordered_set<int>> btd; map<int,unordered_set<int>> btq; PII dtb[1010];
int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ scanf("%d",&l); dtq[i]=l; qtd[l].insert(i); dtb[i].second = i; }
scanf("%d",&g); for(int i=1;i<=g;i++){ scanf("%d%d%d%d%d%d",&f,&a,&na,&pa,&paa,&paar); for(int j=1;j<=f;j++){ bool ck= false; if(paa){ for(int k=1;k<=n;k++){ int jd = dtb[k].second; if(na && !qtd[na].count(jd)){ continue; } if(pa && !btq[pa].count(dtq[jd])){ continue; } if(btd[paa].count(jd)){ continue; } ck=true; dtb[k].first++; btd[a].insert(jd); btq[a].insert(dtq[jd]); printf("%d ",jd); break; } } if(!ck && ((paa && paar==0)|| paa==0)){ for(int k=1;k<=n;k++){ int jd = dtb[k].second; if(na && !qtd[na].count(jd)){ continue; } if(pa && !btq[pa].count(dtq[jd])){ continue; } ck=true; dtb[k].first++; btd[a].insert(jd); btq[a].insert(dtq[jd]); printf("%d ",jd); break; } } if(!ck) printf("0 ");
sort(dtb+1,dtb+1+n); } printf("\n"); }
return 0; }
|
题意
思路
代码
分数: