CF2093 B/C题解
B. Shohag Loves Strings
注意到两个相同字母 aa 的 \(f(p)\) 为偶数,所以如果找到两个相邻相同字母输出即可。如果没有相邻相同的两个字母,则说明字符串相邻的字母一定不同,再考察三个相邻的字母的情况,发现三个字母均不同,如 abc 时 \(f(p)\) 也为偶数,又找到一种合法的情况。那么剩下的情况(既没有 aa 又没有 abc)只有形如 abababa... 的结构了,不管多长都是无解(手工模拟可以发现每多一对 ab \(f(p)\) 加 \(2\),不改变奇偶性)。
string s; cin >> s;
int n = s.size();
if (n == 1) return cout << "-1\n", void(0);
rep(i, 0, n - 2)
if (s[i] == s[i + 1]) return cout << s[i] << s[i + 1] << '\n', void(0);
if (n == 2) return cout << "-1\n", void(0);
rep(i, 0, n - 3)
if (s[i] != s[i + 1] && s[i + 1] != s[i + 2] && s[i] != s[i + 2])
return cout << s[i] << s[i + 1] << s[i + 2] << '\n', void(0);
cout << "-1\n";
C1. Shohag Loves XOR (Easy Version)
注意到 \(y>2x\) 的时候,\(x\oplus y\) 的值有一个 \(x\) 消不去的高位 1,所以不可能是 \(x,y\) 的因数。因此只需要考虑 \(y\le 2x\) 的情况,可以直接从 \(1\) 到 \(\min(m, 2x)\) 枚举 \(y\)。
LL x, m, ans = 0;
cin >> x >> m;
rep(y, 1, min(2 * x, m))
if (x != y && ((x % (x ^ y) == 0) || (y % (x ^ y) == 0))) ans++;
cout << ans << '\n';

浙公网安备 33010602011771号