社区讨论
扯点闲话
灌水区参与者 4已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @m1uf2khp
- 此快照首次捕获于
- 2024/10/04 15:41 去年
- 此快照最后确认于
- 2024/10/04 15:43 去年
CPP
#include<bits/stdc++.h>
using namespace std;
struct node{
int tp, x, y;
}b[10];
string s[4] = {"Tang", "Kong", "Neng", "Jing"};
int get(string ss){
for(int i = 0; i < 4; i++){
if(ss == s[i]){
return i;
}
}
}
int p, k, t, st, sum, num;
int c[10], vs[10], flg = 0;
void dfs(int dep, int pls){
if(dep > t){
int nsum = sum+pls*num, nst = st, nnum = num;
for(int i = 1; i <= t; i++){
int id = c[i];
auto[tp, x, y] = b[id];
if(tp == 0){
nsum+=x;
}else if(tp == 1){
if(nsum >= x) nsum+=a[y]+pls, nst |= (1 << y), nnum++;
}else{
if((nst & x) == x) flg = 1;
}
if(nnum == 4) flg = 1;
}
return ;
}
for(int i = 1; i <= k; i++){
if(!vs[i]){
c[dep] = i, vs[i] = 1;
dfs(dep+1, pls);
vs[i] = 0;
}
}
}
bool check(int mid){
flg = 0, dfs(1, mid);
return flg;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, m, tot = 0;
cin >> n >> m;
vector<int> w(n+1, 100);
for(int i = 0; i < 4; i++){
cin >> a[i];
tot += a[i];
}
for(int o = 1; o <= n; o++){
num = 4, st = (1 << 4)-1, sum = tot;
cin >> p >> k >> t;
for(int i = 1; i <= p; i++){
string ss;
cin >> ss;
int id = get(ss);
num--, st ^= (1 << id), sum -= a[id];
}
for(int i = 1, x; i <= k; i++){
string ss;
cin >> ss;
if(ss == "G"){
cin >> x;
b[i] = {0, x, 0};
}else if(ss == 'S'){
cin >> ss >> x;
int id = get(ss);
b[i] = {1, x, id};
}else{
cin >> x;
int nw = 0;
for(int j = 1; j <= x; j++){
cin >> ss;
int id = get(ss);
nw |= (a << id);
}
b[i] = {2, nw, 0};
}
}
int l = 0, r = 100;
while(l<=r){
int mid = (l+r)>>1;
if(check(mid)){
w[o] = mid, r = mid-1;
}else{
l = mid+1;
}
}
}
vector<int> ans(m), mk(n+1);
for(int o = 0; o < m; o++){
int pd = 0;
for(int i = 1; i <= n; i++){
if(!mk[i] && w[i] <= o){
pd = 1;
ans[o] = i, mk[i] = 1;
break;
}
}
if(!pd){
cout << "-1\n";
return 0;
}
}
for(int x : ans) cout << x << " ";
cout << "\n";
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...