标签:const namespace phoenix glob while string int += 算法
当时比赛做的时候有点急躁,就首先考虑了三种情况,分别是砝码总重恰好为x,大于x和小于x.显然只有总重恰好为x的时候才会必然爆炸,否则都可以通过一定的方式进行规避。然后考虑如何安排顺序进行规避,如果总重小于x则显然随便安排都不会炸。但是如果总重大于x则就要考虑怎么安排了,思路如下:
先排序(后来看了别人的题解发现也可以不排)。然后设置一个st数组,如果加上了某个砝码会产生爆炸,则暂时不加这个砝码先加后面的,到最后再把这些补上。(这个基于题目上给的所有砝码都是不同的,codeforces还是很贴心的,给了加粗提示,但是平时读题时一定要仔细认真)
代码当时赶时间写的比较凌乱。
1 #include<iostream> 2 #include<cstring> 3 #include<algorithm> 4 #include<cstdio> 5 using namespace std; 6 const int N=155; 7 int n,x; 8 int w[N]; 9 int st[N]; 10 int main(){ 11 12 int T; 13 cin>>T; 14 while(T--){ 15 memset(st,0,sizeof(st)); 16 cin>>n>>x; 17 int s=0; 18 for(int i=1;i<=n;i++){ 19 cin>>w[i]; 20 s+=w[i]; 21 } 22 if(s==x) cout<<"NO"<<endl; 23 else{ 24 cout<<"YES"<<endl; 25 if(s<x){ 26 for(int i=1;i<=n;i++) cout<<w[i]<<‘ ‘; 27 cout<<endl; 28 } 29 else{ 30 int sum=0; 31 sort(w+1,w+n+1); 32 for(int i=1;i<=n;i++){ 33 if(sum+w[i]!=x){ 34 cout<<w[i]<<‘ ‘; 35 sum+=w[i]; 36 st[i]=1; 37 } 38 } 39 for(int i=1;i<=n;i++) 40 if(st[i]==0) cout<<w[i]<<‘ ‘; 41 cout<<endl; 42 } 43 } 44 } 45 46 47 48 return 0; 49 50 }
Codeforces Global Round 14 A. Phoenix and Gold
标签:const namespace phoenix glob while string int += 算法
原文地址:https://www.cnblogs.com/talk-sea/p/14728537.html