A:
#pragma GCC optimize ("O2")
#include <bits/stdc++.h>
#include <ext/rope>
using namespace std;
using namespace __gnu_cxx;
#define met(s) memset(s, 0, sizeof(s))
#define rep(i, a, b) for(int i = a; i <= b; ++i)
template <class T> inline void scan_d(T &ret) {
char c; ret = 0;
while ((c = getchar()) < '0' || c > '9');
while (c >= '0' && c <= '9') {
ret = ret * 10 + (c - '0'), c = getchar();}}
typedef long long LL;
typedef unsigned long long ull;
typedef pair<int, int> pii;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
const int MAXN = 1e3 + 10;
int a[MAXN];
int main() {
int n, sum = 0;
scanf("%d", &n);
for(int i = 0; i < n; ++i) {
scanf("%d", &a[i]);
sum += a[i];
}
int res = -1;
for(int i = 0; i < n; ++i) {
if(a[i] + a[i] != sum) {
res = i;
break;
}
}
if(res == -1 || n == 1) {
puts("-1");
return 0;
}
printf("%d\n", n - 1);
bool flag = false;
for(int i = 0; i < n; ++i) {
if(res == i) continue;
if(flag) printf(" ");
flag = true;
printf("%d", i + 1);
}
puts("");
return 0;
}
B:
#pragma GCC optimize ("O2")
#include <bits/stdc++.h>
#include <ext/rope>
using namespace std;
using namespace __gnu_cxx;
#define met(s) memset(s, 0, sizeof(s))
#define rep(i, a, b) for(int i = a; i <= b; ++i)
template <class T> inline void scan_d(T &ret) {
char c; ret = 0;
while ((c = getchar()) < '0' || c > '9');
while (c >= '0' && c <= '9') {
ret = ret * 10 + (c - '0'), c = getchar();}}
typedef long long LL;
typedef unsigned long long ull;
typedef pair<int, int> pii;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
const int MAXN = 1e3 + 10;
int b[MAXN], a[MAXN];
int main() {
int n, m, p = 0;
scanf("%d %d", &n, &m);
int L = 0, R = 0;
for(int i = 0; i < n; ++i) scanf("%d", &b[i]);
for(int i = 0; i < n; ++i) {
if(b[i] & 1) L++;
else R++;
if(L == R && i != n - 1) a[p++] = abs(b[i] - b[i + 1]);
}
if(L != R || !p) printf("0\n");
else {
sort(a, a + p); int sum = 0;
for(int i = 0; i < p; ++i) {
// printf("%d\n", a[i]);
sum += a[i];
if(sum > m) {
printf("%d\n", i);
return 0;
}
}
printf("%d\n", p);
}
return 0;
}
C
#pragma GCC optimize ("O2")
#include <bits/stdc++.h>
#include <ext/rope>
using namespace std;
using namespace __gnu_cxx;
#define met(s) memset(s, 0, sizeof(s))
#define rep(i, a, b) for(int i = a; i <= b; ++i)
template <class T> inline void scan_d(T &ret) {
char c; ret = 0;
while ((c = getchar()) < '0' || c > '9');
while (c >= '0' && c <= '9') {
ret = ret * 10 + (c - '0'), c = getchar();}}
typedef long long LL;
typedef unsigned long long ull;
typedef pair<int, int> pii;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
const int MAXN = 3e5 + 10;
int b[MAXN], a[MAXN];
char str[MAXN];
int main() {
LL n, x, y;
scanf("%lld %lld %lld", &n, &x, &y);
scanf("%s", str + 1);
bool flag = false; LL ans = 0;
for(int i = 1; i <= n; ++i) {
if(str[i] == '1') flag = false;
else {
if(!flag) ans++;
flag = true;
}
}
if(!ans) printf("0\n");
else printf("%lld\n", min(ans * y, x * (ans - 1) + y));
return 0;
}
D:直接DFS找规律
#pragma GCC optimize ("O2")
#include <bits/stdc++.h>
#include <ext/rope>
using namespace std;
using namespace __gnu_cxx;
#define met(s) memset(s, 0, sizeof(s))
#define rep(i, a, b) for(int i = a; i <= b; ++i)
template <class T> inline void scan_d(T &ret) {
char c; ret = 0;
while ((c = getchar()) < '0' || c > '9');
while (c >= '0' && c <= '9') {
ret = ret * 10 + (c - '0'), c = getchar();}}
typedef long long LL;
typedef unsigned long long ull;
typedef pair<int, int> pii;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
const int MAXN = 3e5 + 10;
map<LL, LL> mp;
LL b[MAXN];
LL a[] = {1, 5, 10, 50};
LL n, ans = 0;
void dfs(LL x, LL y, int id) {
if(y == 0) {
if(!mp[x]) ans++;
mp[x] = 1;
return ;
}
if(id > 3) return ;
for(int i = 0; i <= n; ++i) {
if(y - i < 0) continue;
dfs(x + i * a[id], y - i, id + 1);
}
}
int main() {
scanf("%lld", &n);
if(n <= 15) {
dfs(0, n, 0);
printf("%lld\n", ans);
} else {
printf("%lld\n", 488 + (n - 15) * 49 * 1LL);
}
// ans = 0; mp.clear();
// dfs(0, n, 0);
// printf("## %lld\n", ans);
return 0;
}