A题
没什么好说的,总和一定是0
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 30;
int gcd(int a, int b) {
return b ? gcd(b, a % b) : a;
}
void solve(){
int n; cin >> n;
vector<int>a(n);
int ans1 = 0,ans2 = 0;
for (int i = 1; i < n; i++) {
cin >> a[i];
if (a[i] >= 0)
ans1 += a[i];
else
ans2 += abs(a[i]);
}
cout << ans2 - ans1 << '\n';
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
std::cout.tie(0);
int t = 1;
cin >> t;
while (t--)
solve();
return 0;
}
B题
村长先告诉给花费最低的人a,a再告诉别的花费小于p的人,他们再告诉别人,如果还有剩下的人,由村长告诉
#include<bits/stdc++.h>
#define int long long
using namespace std;
using ll = long long;
const int N = 30;
int gcd(int a, int b) {
return b ? gcd(b, a % b) : a;
}
struct my {
int a;
int b;
};
auto cmp(my a, my b) {
return a.b < b.b;
}
void solve(){
int n, p; cin >> n >> p;
vector<my>c(n + 1);
for (int i = 1; i <= n; i++) {
cin >> c[i].a;
}
for (int i = 1; i <= n; i++) {
cin >> c[i].b;
}
if (n == 1) {
cout << p << '\n';
return;
}
sort(c.begin() + 1, c.end(),cmp);
ll ans = 0;
int t = n; int tt=0;
int cnt = 0;
t--;
ans += p;
for (int i = 1; i <= n; i++) {
if (c[i].b <= p) {
tt += c[i].a;
}
else
break;
}
if (tt>=t) {
for (int i = 1; i <= n; i++) {
if (t > c[i].a) {
ans += c[i].b * c[i].a;
t -= c[i].a;
}
else {
ans += c[i].b * t;
break;
}
}
}
else {
t--;
ans += p;
for (int i = 1; i <= n; i++) {
if (p >= c[i].b) {
ans += c[i].b * c[i].a;
t -= c[i].a;
}
else
break;
}
ans += t * p;
}
cout << ans << '\n';
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
std::cout.tie(0);
int t = 1;
cin >> t;
while (t--)
solve();
return 0;
}
C题
推一下可以发现,k只可能等于1,2,3,注意判断一下m为n的倍数(m=n不算),当时脑子卡了觉得0~m有m个数,wa了6发
#include<bits/stdc++.h>
#define int long long
using namespace std;
using ll = long long;
const int N = 30;
int gcd(int a, int b) {
return b ? gcd(b, a % b) : a;
}
inline void solve(){
int n, m, k; cin >> n >> m >> k;
int ans = 0;
if (k > 3) {
cout << ans << '\n';
return;
}
if (k == 3) {
if (m > n) {
ans = m - n;
ans -= m / n - 1;
}
else
ans = 0;
}
if (k == 1) {
ans=1;
}
if (k == 2) {
if (m > n) {
ans += n;
ans += m / n - 1;
}
else
ans = m ;
}
cout << ans << '\n';
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
std::cout.tie(0);
int t = 1;
cin >> t;
while (t--)
solve();
return 0;
}
别的明天再补了,只能切ABC实属弱鸡