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

Codeforces Global Round 14 A. Phoenix and Gold

时间:2021-05-23 23:40:03      阅读:0      评论:0      收藏:0      [点我收藏+]

标签: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

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