abc 274 C
题意有些难理解
这并不是一道图论 dfs 的题,而是一道模拟题
每次的分裂是有时序关系的,也就是说还没有分裂出来的不会在输入中作为母体出现
编号为
A i的变形虫分裂成了两个新的变形虫,编号分别为 2i 和 2i+1
abc 271 C
以当前看到的卷数为基准,如果已经有了这卷,直接跳过
如果没有这卷,需要卖两本,买一本,全部持有的书减少了 1
看过的那一本的是不会卖的,卖的都是没看过的(包括重复的、没看到的)
当总的卷数无法支撑继续看下去,就只能看到这里了
abc 268 C
每个对应位置上的食物,想要回到“舒适”的位置,有三个转动次数的可能
分别是 食物p[i] 和 人i 刚好对应,或者在环中人的左边或者右边
用 cnt 记录转动 i 次满意的人数,找到最多的满意人数
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<int> p(n);
for (int i = 0; i < n; i ++) cin >> p[i];
vector<int> cnt(n);
int ans = 0;
for (int i = 0; i < n; i ++)
{
int c = (p[i] - i + n) % n;
int a = (c - 1 + n) % n, b = (c + 1) % n;
cnt[a] ++, cnt[b] ++, cnt[c] ++ ;
}
for (int i = 0; i < n; i ++) ans = max(ans, cnt[i]);
cout << ans << '\n';
return 0;
}
abc 267 C
把相同字符转化为字段
abc 266 C
由于点是逆时针提供的,将三点构成的向量每个都用向量叉乘计算一遍
由结果的正负得到向量的位置是否满足凸四边形条件
https://blog.csdn.net/minmindianzi/article/details/100056129
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
array<int, 8> x, y;
for (int i = 0; i < 4; i ++)
{
cin >> x[i] >> y[i];
x[i + 4] = x[i], y[i + 4] = y[i];
}
for (int i = 0; i < 4; i ++) {
int a = x[i] - x[i + 1], b = y[i] - y[i + 1], c = x[i + 2] - x[i + 1], d = y[i + 2]- y[i + 1];
if (a * d - b * c > 0) {
cout << "No\n";
return 0;
}
}
cout << "Yes\n";
return 0;
}