其他分享
首页 > 其他分享> > 【Codeforces Global Round 14】-A. Phoenix and Gold-暴力

【Codeforces Global Round 14】-A. Phoenix and Gold-暴力

作者:互联网

题目:
在这里插入图片描述
思路:
每次由于我们放的重量不断累加,一旦超过x便安全了
我们从小到大放元素
如果下一个元素放进去会=x
我们就向后寻找有没有能让总重量跳过的
如果有就是放进去
如果没有输出NO

代码:

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <map>
#include <queue>
#include <unordered_map>
#include <stack>
#include <string>
#include <vector>
#define IOS ios::sync_with_stdio(false)
#define rep1(i, a, n) for (int i = a; i <= n; i++)
#define rep2(i, a, n) for (int i = a; i >= n; i--)
#define each_cass(cass) for(cin >> cass; cass; cass--)
#define lowbit(x) (x&-x)
#define mm(a, b) memset(a, b, sizeof(a))
#define SP system("pause")
#define Chivas int main()
#define gcd(a,b) __gcd(a,b)
#define Regal return 0
typedef long long ll;
const int INF = 0x7FFFFFFF;
const double G = 10;
const double eps = 1e-6;
const double PI = acos(-1.0);
using namespace std;
 
inline void solve(){
    int n, x;
    cin >> n >> x;
    int a[n + 10];
    for(int i = 0; i < n; i ++) cin >> a[i];
    sort(a, a + n);
    int sum = 0;
    map<int, int>mp;//存某个下标是否使用过
    vector<int >ord;//存答案每个位置对应原数组的下标
    for(int i=0 ; i < n; i ++){
        if(mp[i]) continue;
        if(sum + a[i] == x){//下一个位置=x了
            int flag = false;//判断能不能找得到
            for(int j = i; j < n; j ++){
                if(sum + a[j] != x){
                    flag = true;
                    sum += a[j];
                    ord.push_back(j);
                    mp[j] = 1;
                    break;
                }
            }
            if(!flag){
                cout << "NO" << endl;
                return;
            }
        }else{
            sum += a[i];
            ord.push_back(i);
            mp[i] = 1;
        }
    }//把没用的元素加进去
    for(int i = 0; i < n; i ++){
        if(!mp[i]){
            ord.push_back(i);
            mp[i] = 1;
        }
    }
    cout << "YES" << endl;
    for(int i = 0; i < n; i ++) cout << a[ord[i]] << " ";
    cout << endl;
}
 
Chivas{
    IOS;
    int cass;
    each_cass(cass){
        solve();
    }
    Regal;
}

标签:Phoenix,Gold,int,sum,Global,mp,cass,include,define
来源: https://blog.csdn.net/SnopzYz/article/details/116375258