A 智乃的博弈游戏
智乃的博弈游戏
这个题目给我们的 n 是 1e18 ,通过玩样例得知,这个是一个很经典的奇偶博弈问题。
int x; cin >> x;
if (x & 1) cout << "Yes";
else cout << "No";
B智乃的Notepad(Easy version)
我们可以对序列进行排序,我们要保证最长的一个序列在最后。那们最后的那个最长的序列一定是不用删除的,可以留在电脑屏幕上。所以我们求一下 lcp 然后每一次都是计算一个全部打出来字母的个数然后全部删除字母的个数。然后减去 2 * lcp。这就是这个题的正解。至于说中间字符的顺序实际上其实不是很重要,我们只要保证最后一个是最长的就行了。
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
constexpr int N = 1e5 + 10;
string s[N];
int lcp(string a, string b)
{
int i = 0;
while (i < a.size() && i < b.size() && a[i] == b[i])
i++;
return i;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
int mmax = 0;
for (int i = 1; i <= n; i++)
{
cin >> s[i];
mmax = max(mmax, int(s[i].size()));
}s + 1, s + 1 + n);
int
sort( ans = 0;
while (m--)
{
int l, r;
cin >> l >> r;
for (int i = 1; i <= n; i++)
{
ans += 2 * s[i].size();
if (i != 1)
{
ans -= lcp(s[i], s[i - 1]) * 2;
}
}
cout << ans - mmax << "\n";
}
return 0;
}
F 智乃的捉迷藏
智乃的捉迷藏
这个题目我们可以考虑一个最极端的情况,就是考虑所有人站在三角形的三个角上。这种情况下就是最大的情况。最小的情况就是没有 n 个这种情况了。
void solve()
{
int n, a, b, c; cin >> n >> a >> b >> c;
if (a + b + c >= n && a + b + c <= n * 2)
cout << "Yes" << "\n";
else cout << "No" << "\n";
}
M 智乃的牛题
对所有的字符串进行排序,然后直接作比较即可。
ios::sync_with_stdio(false);
cin.tie(nullptr);
string mo = "nowcoder";
sort(mo.begin(), mo.end());
string s; cin >> s;
sort(s.begin(), s.end());
if (s == mo) cout << "happy new year";
else cout << "I AK IOI";
4219

被折叠的 条评论
为什么被折叠?



