QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#789856 | #8936. Team Arrangement | BaseAI# | WA | 0ms | 3524kb | C++23 | 2.5kb | 2024-11-27 22:17:45 | 2024-11-27 22:17:45 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
const int N = 67;
const int INF = 1e9;
int n;
int ans;
int w[N];
int num[N],numst[N];
bool vis[N];
vector<int> L[N];
int tot;
int sum[N]; //sum[x] l<=x 的个数
int suf[N]; //suf[x] r>=x 的个数
auto start = chrono::high_resolution_clock::now();
void Dfs(int rmn,int mx) {
auto stop = chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(stop - start).count();
if(duration > 990) {
cout << ans << "\n";
exit(0);
}
if(n-rmn > sum[mx]) return ; //已选的(l均小于等于x) 比线段多
if(rmn > suf[mx]) return ; //后选的(r均大于等于x) 比线段多
if(rmn == 0) {
//++tot;
set<int> st;
for(int i=1;i<=n;++i) numst[i] = 0;
bool flag = 1;
for(int i=1;i<=n;++i) {
for(auto r : L[i]) {
if(numst[r]==0)
st.insert(r);
++numst[r];
}
for(int j=0;j<num[i];++j) {
auto it = st.lower_bound(i);
if(it == st.end()) {
flag = 0; break;
} else {
int y = *it;
if(!--numst[y]) st.erase(it);
}
}
if(!flag) break;
}
if(flag) {
int val = 0;
for(int i=1;i<=n;++i) val += (num[i]/i)*w[i];
ans = max(ans, val);
}
return ;
}
if(rmn-mx+1 <= 0) return ;
vector<pair<int,int> > tmp(rmn-mx+1, make_pair(0, 0));
for(int i=0;i<rmn-mx+1;++i) {
tmp[i] = make_pair(-w[i+mx], i+mx);
}
sort(tmp.begin(), tmp.end());
for(auto [w, i] : tmp) {
num[i] += i;
Dfs(rmn-i, i);
num[i] -= i;
if(rmn<=i*2)
{
num[rmn] += rmn;
Dfs(0,rmn);
num[rmn] -= rmn;
break;
}
}
}
void solve() {
cin >> n;
for(int i=1;i<=n;++i) {
int l, r;
cin >> l >> r;
L[l].push_back(r);
sum[l]++;
suf[r]++;
}
for(int i=1;i<=n;++i) sum[i] += sum[i-1];
for(int i=n;i>=0;--i) suf[i] += suf[i+1];
for(int i=1;i<=n;++i) cin >> w[i];
ans = -INF;
Dfs(n, 1);
if(ans == -INF) cout << "impossible" << "\n";
else cout << ans << "\n";
// printf("tot = %d\n",tot);
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
solve();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3524kb
input:
3 2 3 1 2 2 2 4 5 100
output:
impossible
result:
wrong answer 1st lines differ - expected: '9', found: 'impossible'