码迷,mamicode.com
首页 > 其他好文 > 详细

E. Spaceship Solitaire

时间:2020-07-10 21:06:51      阅读:50      评论:0      收藏:0      [点我收藏+]

标签:with   force   合成   long   pac   fine   ==   说明   pre   

题目入口

题意:需要合成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

标签:with   force   合成   long   pac   fine   ==   说明   pre   

原文地址:https://www.cnblogs.com/qq103013999/p/13281075.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!