P6956 题解
题意
若
若
若
要求判断所有
思路
很简单,开桶来记录每次的提供与消耗。但是,
陷阱
有可能出现价值随意的物品多余的情况,随意输出即可,本蒟蒻输出的是
代码
#include<bits/stdc++.h>
using namespace std;
int n,t,i,x,sum,f[1010],a[1010];
int main(){
cin>>n;
for(i=1;i<=n;i++){
cin>>x;
if(x>0)f[x]++;//为正数时价值为x的物品数量加一
else if(x<0){
if(f[-x]>0)f[-x]--;//数量足够,就消耗掉一个
else{
if(sum>0)a[++t]=-x,sum--;//拿前面价值随意的物品来补救
else{cout<<"No";return 0;}//救不了输出No
}
}
else sum++;//价值随意的物品个数加一
}
cout<<"Yes\n";
for(i=1;i<=t;i++)
cout<<a[i]<<" ";
while(sum>0)cout<<"1000 ",sum--;
}