Educational Codeforces Round 90 (Rated for Div. 2)
tm小学期和物理实验终于结束了, 这场是现打的, 不行了, 除了A, 都要wa一边, 不是ll就是特判, E的表sb的跑1e18没跑出来
A
氵题, 看题意写
#include <bits/stdc++.h>
#define all(n) (n).begin(), (n).end()
#define se second
#define fi first
#define pb push_back
#define mp make_pair
#define sqr(n) (n)*(n)
#define rep(i,a,b) for(int i=a;i<=(b);++i)
#define per(i,a,b) for(int i=a;i>=(b);--i)
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef vector<int> VI;
typedef double db;
const int N = 1e5 + 5;
int n, m, _, k;
int main() {
ios::sync_with_stdio(0); cin.tie(0);
for (cin >> _; _; --_) {
int a, b, c; cin >> a >> b >> c;
if (a >= c) cout << -1 << ' ';
else cout << 1 << ' ';
if ((ll)a * b > c) cout << b << '\n';
else cout << -1 << '\n';
}
return 0;
}
B
没啥博弈, 就是查能操作几次就行
wa每次反转在没清零
#include <bits/stdc++.h>
#define all(n) (n).begin(), (n).end()
#define se second
#define fi first
#define pb push_back
#define mp make_pair
#define sqr(n) (n)*(n)
#define rep(i,a,b) for(int i=a;i<=(b);++i)
#define per(i,a,b) for(int i=a;i>=(b);--i)
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef vector<int> VI;
typedef double db;
const int N = 1e5 + 5;
int n, m, _, k;
char s[105];
int main() {
ios::sync_with_stdio(0); cin.tie(0);
for (cin >> _; _; --_) {
cin >> s + 1;
int c = 0, a = 0, b = 0;
for (int i = 1; s[i]; ++i) {
if (s[i] == '0') ++a;
else ++b;
if (s[i] == s[i + 1]) continue;
if (b >= a) {
c += a; b -= a; a = 0;
} else {
c += b; a -= b; b = 0;
}
}
if (c & 1) cout << "DA\n";
else cout << "NET\n";
}
return 0;
}
C
模拟找出等差序列, 最后算上整个长度
wa在爆int
#include <bits/stdc++.h>
#define all(n) (n).begin(), (n).end()
#define se second
#define fi first
#define pb push_back
#define mp make_pair
#define sqr(n) (n)*(n)
#define rep(i,a,b) for(int i=a;i<=(b);++i)
#define per(i,a,b) for(int i=a;i>=(b);--i)
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef vector<int> VI;
typedef double db;
const int N = 1e6 + 5;
int n, m, _, k;
char s[N];
int main() {
ios::sync_with_stdio(0); cin.tie(0);
for (cin >> _; _; --_) {
cin >> s + 1;
ll c = 0, a = 0, len = 1, w = 0, ans = 0, b = 0;
for (ll& i = len; s[i]; ++i) {
if (s[i] == '-') ++c;
else --c;
if (a < c) a = c, ans;
}
c = 0;
for (ll i = 1; s[i]; ++i) {
if (s[i] == '-') ++c;
else --c;
if (b < c) ans += (a - b + 1) * (i - w), b = c, w = i;
}
cout << ans + (len - w - 1) << '\n';
}
return 0;
}
D
每两个数做差, 求最大和序列
wa在第二次做差是奇偶做差, 存在要补最后一位的情况(忘了)
#include <bits/stdc++.h>
#define all(n) (n).begin(), (n).end()
#define se second
#define fi first
#define pb push_back
#define mp make_pair
#define sqr(n) (n)*(n)
#define rep(i,a,b) for(int i=a;i<=(b);++i)
#define per(i,a,b) for(int i=a;i>=(b);--i)
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef vector<int> VI;
typedef double db;
const int N = 2e5 + 5;
int n, m, _, k;
ll a[N], b[N << 1];
ll work(ll b[], int n, int k) {
rep (i, 0, n - 1) {
a[i] = 0;
if (i & 1) a[i >> 1] += b[i] * k;
else a[i >> 1] -= b[i] * k;
}
n = (n + 1) >> 1;
ll res = 0, cur = 0, l, r, rl = 0;
rep (i, 0, n - 1) {
cur += a[i];
if (cur > res) {
r = i; l = rl;
res = cur;
}
if (cur < 0) cur = 0, rl = i + 1;
}
return res;
}
int main() {
ios::sync_with_stdio(0); cin.tie(0);
for (cin >> _; _; --_) {
cin >> n;
ll ans = 0;
rep (i, 1, n) {
cin >> b[i];
if (i & 1) ans += b[i];
}
ll a1 = work(b + 1, n, 1); b[n + 1] = 1e9;
ll a2 = work(b + 2, n - (n & 1), -1);
cout << ans + max(a1, a2) << '\n';
}
return 0;
}
E
0特判, 其他打标到1e9
int main() {
//freopen("data.out", "w", stdout);
for (int n = 1; n <= 150; ++n) {
for (int k = 1; k <= 9; ++k) {
bool flag = 0;
for (ll j = 0; j <= 1e9; ++j) {
int c = 0;
for (int t = 1; t <= k && c <= n; ++t) c += f(j + t);
if (c == n) { printf("%d, ", j); flag = 1; break;}
}
if (flag == 0) printf("-1, ");
}
puts("");
}
return 0;
}
只要能跑出来表就过了