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;
}
标签:std,int,Codeforces,long,abs,ans,931,Div,define
From: https://www.cnblogs.com/du463/p/18048406