E. Spaceship Solitaire
Posted qq103013999
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了E. Spaceship Solitaire相关的知识,希望对你有一定的参考价值。
题意:需要合成1-n个资源,每个资源需要ai个,每回合只能合成1个资源,有q次询问,每次询问有s,t,u,如果当前有资源t个s,则将获得一个u资源。求每次询问需要最少的回合数来合成所有资源。
!!!因为题目有一个条件: 1 <= tj < asj 说明合成所有资源必定能完成询问任务
ans=∑ai 每次询问,当a[u]>0时 ,ans-- ;a[u]<0时,说明超出题目要求,但也没有关系。
#include <bits/stdc++.h>
using namespace std;
/*#define in freopen("data.in","r",stdin);
#define out freopen("a.out","w",stdout);*/
typedef long long ll;
const int MAXN=2e5+10;
ll a[MAXN];
map<pair<int,int>,int>mp;
int main(){
ios::sync_with_stdio(false);
int n;
cin>>n;
ll ans=0;
for(int i=1;i<=n;i++){
cin>>a[i];
ans+=a[i];
}
int q;cin>>q;
while(q--){
int s,t,u;
cin>>s>>t>>u;
if(mp[make_pair(s,t)]==0){
mp[make_pair(s,t)]=u;
a[u]--;
if(a[u]>=0){
ans--;
}
}
else{
a[mp[make_pair(s,t)]]++;
if(a[mp[make_pair(s,t)]]>0)ans++;
mp[make_pair(s,t)]=u;
a[u]--;
if(a[u]>=0)ans--;
}
//for(int i=1;i<=n;i++)cout<<a[i]<<" ";cout<<endl;
cout<<ans<<endl;
}
return 0;
}
以上是关于E. Spaceship Solitaire的主要内容,如果未能解决你的问题,请参考以下文章