2024牛客寒假算法基础集训营4
A 柠檬可乐
void solve() {
int a, b, k;cin >> a >> b >> k;
if (a >= k * b) {
cout << "good\n";
} else {
cout << "bad\n";
}
}
B 左右互博
玩石头游戏。
游戏一开始有
轮到某个人时,这个人先选数量为
当有某个人不能操作时,则失败,另一个人胜利。
两人都绝顶聪明,必定使用最佳策略。讨厌鬼先手,他想知道他能不能获得胜利?
容易发现当
void solve() {
int n;cin >> n;vector<int> a(n);for (auto& i : a)cin >> i;
int cnt = 0;
for (int i = 0;i < n;i++) {
if (a[i] >= 2){
cnt += a[i] - 1;
}
}
if (cnt % 2) {
cout << "gui\n";
} else {
cout << "sweet\n";
}
}
C 冬眠
阿宁生活在一个
在每一天,都会有
- 如果是第
行循环移动,那么第 行所有字符往后移动一个,最后一个字符移动到第 行开头。 - 如果是第
列循环移动,那么第 列所有字符往后移动一个,最后一个字符移动到第 列开头。
阿宁将要冬眠
char a[110][110];
void solve() {
int n, m, x, y;cin >> n >> m >> x >> y;
x--, y--;
for (int i = 0;i < n;i++) {
for (int j = 0;j < m;j++) {
cin >> a[i][j];
}
}
int p, q;cin >> p >> q;
vector<pair<int, int>> op(q);
for (int i = 0;i < q;i++) {
cin >> op[i].first >> op[i].second;
op[i].second--;
}
while (p--) {
for (int i = 0;i < q;i++) {
if (op[i].first == 1) {
char temp = a[op[i].second][m - 1];
for (int j = m - 1; j > 0; j--) {
a[op[i].second][j] = a[op[i].second][j - 1];
}
a[op[i].second][0] = temp;
} else {
char temp = a[n - 1][op[i].second];
for (int j = n - 1; j > 0; j--) {
a[j][op[i].second] = a[j - 1][op[i].second];
}
a[0][op[i].second] = temp;
}
}
}
cout << a[x][y] << '\n';
}
D 守恒
给定一个长度为
可以进行任意次操作,每次操作选择数组
操作结束后,数组的最大公约数可能有多少种不同的值?
容易知道,不管如何操作,sum[a]
始终是不变的,且数组 sum[a]
的条件下达到任何数
需要特判
因此可以因式分解
#define int long long
void solve() {
int n;cin >> n;vector<int> a(n), f(n);int cnt = 0;for (auto& i : a)cin >> i, cnt += i;
if (n == 1) {
cout << 1 << "\n";return;
}
int ans = 0;
for (int i = 1;i * i <= cnt;i++) {
if (cnt % i == 0) {
if (n * i <= cnt)
ans++;
if (cnt / i != i && n * (cnt / i) <= cnt) {
ans++;
}
}
}
cout << ans << '\n';
}
E 漂亮数组
求给定数组
G/H 数三角形
求给定矩阵有多少个满足要求的等腰三角形。
easy
:hard
:
.*.
***
..*..
.*.*.
*****
...*...
..*.*..
.*...*.
*******
(待更