比赛链接
A 语法 01:44
思路
大小写转换
代码
#include <bits/stdc++.h>
using namespace std;
#define umap unordered_map
#define cy cout << "Yes" << endl
#define cn cout << "No" << endl
#define ll long long
#define forn(i, l, r) for (int i = l; i <= r; i++)
#define forn_(i, l, r) for (int i = l; i >= r; i--)
#define debug(a) cout << #a << "=" << a << endl;
const int inf = 0x3f3f3f3f;
const int N = 2e5 + 5;
int n, k;
char s[N];
int main() {
cin >> n >> k;
forn(i, 1, n) cin >> s[i];
s[k] = s[k] - 'A' + 'a';
forn(i, 1, n) cout << s[i];
return 0;
}
B 语法 03:35
思路
截取成两个整数,然后按题意判断就行了
代码
#include <bits/stdc++.h>
using namespace std;
#define umap unordered_map
#define cy cout << "Yes" << endl
#define cn cout << "No" << endl
#define ll long long
#define forn(i, l, r) for (int i = l; i <= r; i++)
#define forn_(i, l, r) for (int i = l; i >= r; i--)
#define debug(a) cout << #a << "=" << a << endl;
const int inf = 0x3f3f3f3f;
const int N = 2e5 + 5;
string s;
string x, y;
int main() {
cin >> s;
x = s.substr(0, 2), y = s.substr(2, 2);
int a = stoi(x), b = stoi(y);
int ok1 = (a >= 1 && a <= 12);
int ok2 = (b >= 1 && b <= 12);
if (ok1 && ok2) cout << "AMBIGUOUS";
else if (ok1) cout << "MMYY";
else if (ok2) cout << "YYMM";
else cout << "NA";
return 0;
}
C 概率论 12:28
思路
对于每种点数,直接算期望,然后累加起来就行了
代码
#include <bits/stdc++.h>
using namespace std;
#define umap unordered_map
#define cy cout << "Yes" << endl
#define cn cout << "No" << endl
#define ll long long
#define forn(i, l, r) for (int i = l; i <= r; i++)
#define forn_(i, l, r) for (int i = l; i >= r; i--)
#define debug(a) cout << #a << "=" << a << endl;
const int inf = 0x3f3f3f3f;
const int N = 2e5 + 5;
double n, k;
double ans;
double op(double x) {
double res = 1 / n;
while (x < k) {
x *= 2.0;
res /= 2.0;
}
return res;
}
int main() {
cin >> n >> k;
forn(i, 1, n) ans += op(i);
printf("%.12lf", ans);
return 0;
}
D 构造 搜索 20:33
思路
题目说了,保证能构造出来,那我直接把1设为根,与根相距距离为偶数的就涂一种颜色,是奇数就涂另外一种
突然发现好玄学啊,但是确实能过
代码
#include <bits/stdc++.h>
using namespace std;
#define umap unordered_map
#define cy cout << "Yes" << endl
#define cn cout << "No" << endl
#define ll long long
#define forn(i, l, r) for (int i = l; i <= r; i++)
#define forn_(i, l, r) for (int i = l; i >= r; i--)
#define debug(a) cout << #a << "=" << a << endl;
const int inf = 0x3f3f3f3f;
const int N = 1e5 + 5;
struct node {
int ne, w;
};
int n;
int ans[N];
vector<node> g[N];
void dfs(int u, int f, int sum) {
if (sum & 1) ans[u] = 1;
for (auto v : g[u]) {
if (v.ne == f) continue;
dfs(v.ne, u, sum + v.w);
}
}
int main() {
cin >> n;
forn(i, 1, n - 1) {
int u, v, w;
cin >> u >> v >> w;
g[u].push_back({v, w & 1});
g[v].push_back({u, w & 1});
}
dfs(1, 0, 0);
forn(i, 1, n) cout << ans[i] << endl;
return 0;
}
E 思维 并查集 11:56
思路
一开始纸上画来画去,还分类讨论什么的,因为数列只有1和2,确定一个其他的就出来了(推广到多个数也是一样),仔细一想,这不就是并查集嘛,最后输出连通块个数即可
代码
#include <bits/stdc++.h>
using namespace std;
#define umap unordered_map
#define cy cout << "Yes" << endl
#define cn cout << "No" << endl
#define ll long long
#define forn(i, l, r) for (int i = l; i <= r; i++)
#define forn_(i, l, r) for (int i = l; i >= r; i--)
#define debug(a) cout << #a << "=" << a << endl;
const int inf = 0x3f3f3f3f;
const int N = 1e5 + 5;
struct node {
int ne, w;
};
int n;
int ans[N];
vector<node> g[N];
void dfs(int u, int f, int sum) {
if (sum & 1) ans[u] = 1;
for (auto v : g[u]) {
if (v.ne == f) continue;
dfs(v.ne, u, sum + v.w);
}
}
int main() {
cin >> n;
forn(i, 1, n - 1) {
int u, v, w;
cin >> u >> v >> w;
g[u].push_back({v, w});
g[v].push_back({u, w});
}
dfs(1, 0, 0);
forn(i, 1, n) cout << ans[i] << endl;
return 0;
}
F 构造 44:33
思路
懒得敲了,然后注意特判

代码
#include <bits/stdc++.h>
using namespace std;
#define umap unordered_map
#define cy cout << "Yes" << endl
#define cn cout << "No" << endl
#define ll long long
#define forn(i, l, r) for (int i = l; i <= r; i++)
#define forn_(i, l, r) for (int i = l; i >= r; i--)
#define debug(a) cout << #a << "=" << a << endl;
const int inf = 0x3f3f3f3f;
const int N = 2e5 + 5;
int n, m, k;
int a[N];
int main() {
cin >> n >> k;
m = pow(2, n);
if (n == 1 && k == 0) {
cout << "0 0 1 1";
return 0;
}
if (k >= m || (n == 1 && k == 1)) {
cout << -1 << endl;
return 0;
}
forn(i, 1, m) {
if (i - 1 == k) continue;
cout << i - 1 << ' ';
}
cout << k << ' ';
forn_(i, m, 1) {
if (i - 1 == k) continue;
cout << i - 1 << ' ';
}
cout << k << ' ';
return 0;
}