社区讨论
【CSP2020】贪吃蛇求卡常?
学术版参与者 4已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @mj3qcql5
- 此快照首次捕获于
- 2025/12/13 11:22 2 个月前
- 此快照最后确认于
- 2025/12/14 20:35 2 个月前
写的带 做法,怎么卡过去
C#include<bits/stdc++.h>
using namespace std;
int T , n , ans;
int a[2000005] , dead[2000005] , now[2000005] , dep[2000005] , eaten[2000005];
inline void snake(){
priority_queue<pair<int , int> , vector<pair<int , int> > , greater<pair<int , int> > > pq1;
priority_queue<pair<int , int> > pq2;
for(int i = 1 ; i <= n ; i++){
pq1.push({a[i] , i});
pq2.push({a[i] , i});
now[i] = a[i];
dead[i] = 0;
}
for(int i = 1 ; i < n ; i++){
eaten[i] = pq1.top().second;
dep[i] = pq2.top().second;
pq1.pop() , pq2.pop();
now[dep[i]] -= now[eaten[i]];
now[eaten[i]] = -1;
pq1.push({now[dep[i]] , dep[i]});
pq2.push({now[dep[i]] , dep[i]});
}
for(int i = n - 1 , pos = n - 1 ; i >= 1 ; i--){
if(dead[dep[i]]){
for(int j = pos ; j >= i ; j--) dead[eaten[j]] = 0;
pos = i - 1;
}
else dead[eaten[i]] = 1;
}
ans = 0;
for(int i = 1 ; i <= n ; i++){
if(dead[i] == 0) ans++;
}
cout << ans << "\n";
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0) , cout.tie(0);
cin >> T >> n;
for(int i = 1 ; i <= n ; i++) cin >> a[i];
snake();
while(T-- > 1){
int k , x , y;
cin >> k;
for(int i = 1 ; i <= k ; i++){
cin >> x >> y;
a[x] = y;
}
snake();
}
return 0;
}
回复
共 7 条回复,欢迎继续交流。
正在加载回复...