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';
posted @ 2024-11-25 21:00  XYukari  阅读(21)  评论(0)    收藏  举报