Codeforces Round #560 (Div. 3)F1. Microtransactions (easy version)

		#include <bits/stdc++.h>
using namespace std;
int n,m;
vector <int> ordinary;
vector <pair<int,int> > info(1001);
bool searchdate(int day){
    vector <int> lastsale(n+1,-1);
    for(int i=1;i<=m;i++){
        if(info[i].first <= day){
            lastsale[info[i].second] = max(lastsale[info[i].second],info[i].first);
        }
    }
    vector<vector<int> > samedaysale(1001);
    for(int i=1;i<=n;i++){
        if(lastsale[i] != -1)
        {samedaysale[lastsale[i]].push_back(i);}
    }
    vector <int> order = ordinary;
    int curm = 0;
    for(int i=1;i<=day;i++){
        curm++;
        if(i > 1000) continue;
        for(auto iter : samedaysale[i])
        {
            if(curm >= order[iter]){
                curm -= order[iter];
                order[iter] = 0;
            }
            else{
                order[iter] -= curm;
                curm = 0;
                break;
            }
        }
    }
    return accumulate(order.begin(),order.end(),0) *2 <= curm;
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin>>n>>m;
    ordinary = vector<int>(n+1);
    for(int i=1;i<=n;i++) cin>>ordinary[i];
    for(int i=1;i<=m;i++){
        cin>>info[i].first>>info[i].second;
    }
    for(int ans = 1;ans<=2000;ans++){

        if(searchdate(ans)){
            cout<<ans<<endl;
            break;
        }
    }
}	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值