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的主要内容,如果未能解决你的问题,请参考以下文章

双向广搜-HDU1401 Solitaire

ARC 68F - Solitaire(dp)

ARC 68F - Solitaire(dp)

OpenGL Spaceship 推进器在底部不是圆形的

Solitaire 纸牌游戏 - 如何编程恢复游戏功能?

UVa 10651 Pebble Solitaire(DP 记忆化搜索)