wa死我的坑点就是:如果0没有用完,要随便给他个值输出
#include<bits/stdc++.h>
const int maxn = 1e3+20;
using namespace std;
int n;
int a[maxn],mp[maxn<<1],ans[maxn],pp[maxn];
int main(){
while(~scanf("%d",&n)){
memset(ans,0,sizeof(ans));
memset(mp,0,sizeof(mp));
memset(pp,0,sizeof(pp));
for(int i = 1; i <= n ; i++){
scanf("%d",&a[i]);
}
int cnt = 1, flag = 0;
for(int i = 1; i <= n ;i++){
if(a[i] > 0){
mp[a[i]]++;
}
else if(a[i] == 0){
mp[0]++;
}
else if(a[i] < 0){
if(mp[-a[i]] > 0) mp[-a[i]]--;
else if(mp[0] > 0){
mp[0]--;
ans[cnt] = -a[i];
cnt++;
}
else{
flag = 1;
break;
}
}
}
if(flag) printf("No\n");
else{
printf("Yes\n");
for(int i = 1; i < cnt; i++){
printf("%d ",ans[i]);
}
for(int i = 1 ; i <= mp[0] ; i++){
printf("1 ");
}
printf("\n");
}
}
return 0;
}