Codeforces Round 931 (Div. 2)

Codeforces Round 931 (Div. 2)

比赛链接

A. Too Min Too Max

思路

这题一开始我以为就是简单的模拟一下,四个for循环可能就可以,事实上并不是,因为我们想让最后的值最大,所以我们可以将数组进行排序,之后我们从最左边取两个,最右边取两个,插着求绝对值的和就行

Code

#include <bits/stdc++.h>
using namespace std;
#define all(x) x.begin()+1,x.end()

#define int long long

const int N=1e6+10;


void solve(){
    int n;
    cin>>n;
    std::vector<int> a(n+1);
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(all(a));
    int i=a[n],j=a[1],k=a[n-1],l=a[2];
    int ans=abs(i-j)+abs(j-k)+abs(k-l)+abs(l-i);
    cout<<ans<<endl;

    return ;
    
}

signed main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr), std::cout.tie(nullptr);

    int T = 1;
    std::cin >> T;
    while (T--) solve();

    return 0;

}

B. Yet Another Coin Problem

思路

蒋老师代码太厉害了,就是考虑贪心的策略,拿3个1你不如拿1个3,拿2个3不如拿1个6,拿五个6不如拿3个10,拿3个10不如拿2个15

Code

#include <bits/stdc++.h>
using namespace std;
#define all(x) x.begin()+1,x.end()

#define int long long

void solve() {
    int n;
    std::cin >> n;
    
    int ans = n;
    for (int a = 0; a < 3; a++) {
        for (int b = 0; b < 2; b++) {
            for (int c = 0; c < 5; c++) {
                for (int d = 0; d < 3; d++) {
                    int res = n - a - 3 * b - 6 * c - 10 * d;
                    if (res >= 0 && res % 15 == 0) {
                        ans = std::min(ans, res / 15 + a + b + c + d);
                    }
                }
            }
        }
    }
    std::cout << ans << "\n";
}

signed main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr), std::cout.tie(nullptr);
    // init();

    int T = 1;
    std::cin >> T;
    while (T--) solve();

    return 0;

}
posted @ 2024-03-02 11:01  du463  阅读(27)  评论(0编辑  收藏  举报