巅峰赛#20除T5外全题解(未完成
2025-04-28 22:38:27
发布于:广东
我能在毫无思维题基础的可能下 AK 思维题竞赛吗?这真的是可能的吗?
好吧真不能
T1
题目提示我们需要「深度思考」,所以我们开始「深度思考」。
好的,我现在得仔细看看这个问题。题目是说,给定一个字符串,其中包含一个竖线,我们需要输出竖线之后的内容。首先,我得想想怎么处理输入。因为字符串只包含 | 和小写字母,所以我们可以使用 cin 来输入。然后我们要找到 | 的位置,在 C++ 中,我们可以用 string 自带的 find 来找到 | 的位置。因为输出不能包含 |,所以答案部分就是 s.substr(idx+1)。比如说 hi|acgo,| 所在位置为 2,然后输出从 3 开始的位置的字符串 acgo。
所以我们直接按照深度思考的内容编写代码即可。
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
string s;
cin >> s;//cin 输入
cout << s.substr(s.find('|') + 1);
return 0;
}
时间复杂度:。
本题解为整活,比赛时请不要使用 deepseek
等 AI 帮助解题。
T2
这题全靠感觉去做。
显然一个对角线就能形成一个正方形,如图所示。
所以对于没有干扰的情况下,我们可以直接染对角线。可以证明没有更优的染色方法。
接下来考虑干扰。
偶数的情况不需要管,肯定有一条对角线没有被干扰。
奇数的情况有可能两条对角线都被干扰,所以我们可以按如下方法染色。
上面的可以变成一个 的方格。
然后我们可以发现右下角的点可以一直往左蔓延。
所以当 且 时,可以把所有格点染成黑色。
T1
题目提示我们需要「深度思考」,所以我们开始「深度思考」。
好的,我现在得仔细看看这个问题。题目是说,给定一个字符串,其中包含一个竖线,我们需要输出竖线之后的内容。首先,我得想想怎么处理输入。因为字符串只包含 | 和小写字母,所以我们可以使用 cin 来输入。然后我们要找到 | 的位置,在 C++ 中,我们可以用 string 自带的 find 来找到 | 的位置。因为输出不能包含 |,所以答案部分就是 s.substr(idx+1)。比如说 hi|acgo,| 所在位置为 2,然后输出从 3 开始的位置的字符串 acgo。
所以我们直接按照深度思考的内容编写代码即可。
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
string s;
cin >> s;//cin 输入
cout << s.substr(s.find('|') + 1);
return 0;
}
时间复杂度:。
本题解为整活,比赛时请不要使用 deepseek
等 AI 帮助解题。
T2
这题全靠感觉去做。
显然一个对角线就能形成一个正方形,如图所示。
所以对于没有干扰的情况下,我们可以直接染对角线。可以证明没有更优的染色方法。
接下来考虑干扰。
偶数的情况不需要管,肯定有一条对角线没有被干扰。
奇数的情况有可能两条对角线都被干扰,所以我们可以按如下方法染色。
上面的可以变成一个 的方格。
然后我们可以发现右下角的点可以一直往左蔓延。
所以当 且 时,可以把所有格点染成黑色。
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int n, m;
cin >> n >> m;
if(n == 1){//特判
cout << "No";
return 0;
}
if(n <= m) cout << "Yes";
else cout << "No";
return 0;
}
时间复杂度:。
T3
分类讨论。
如果上一次不是平局,那么就拿这次的最小值减去上一次的最大值。
如果上一次是平局,为避免平局必须得将答案-1。
最后需要加上 的情况。
#include <iostream>
#include <cstdio>
#define int long long
using namespace std;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int n, ans = 0;
int lstx = 0, lsty = 0;
cin >> n;
for(int i = 1; i <= n; i++){
int x, y;
cin >> x >> y;
if(lstx == lsty) ans += min(x, y) - lstx;
else if(lstx < lsty){
if(x >= lsty) ans += min(y - lsty + 1, x - lsty + 1);
}else{
if(y >= lstx) ans += min(x - lstx + 1, y - lstx + 1);
}
lstx = x, lsty = y;
}
cout << ans + 1;
return 0;
}
时间复杂度:。
T4,T6
这两题不是同一道吗(
看不出来性质,考虑打表。
输出 次方的生成器:
#include <iostream>
#include <cstdio>
#include <iomanip>
using namespace std;
void print(int n){
for(int i = 20; i >= 0; i--){
cout << (n >> i & 1);
}
cout << ' ';
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int n;
cin >> n;
for(int i = 1; i <= n; i++){
cout << setw(2) << i << ' ';
//print((i * 2 - 1) * (i * 2 - 1));
print((i * 2 - 1) * (i * 2 - 1) * (i * 2 - 1));
cout << '\n';
}
return 0;
}
的情况如下:
1 000000000000000000001
2 000000000000000011011
3 000000000000001111101
4 000000000000101010111
5 000000000001011011001
6 000000000010100110011
7 000000000100010010101
8 000000000110100101111
9 000000001001100110001
10 000000001101011001011
11 000000010010000101101
12 000000010111110000111
13 000000011110100001001
14 000000100110011100011
15 000000101111101000101
16 000000111010001011111
17 000001000110001100001
18 000001010011101111011
19 000001100010111011101
20 000001110011110110111
没看懂?纵向排列一下:
全部评论 3
被暗沙夜步汇超了,他甚至还上钻石了
2小时前 来自 北京
0他是老师
2小时前 来自 广东
0
d
9小时前 来自 浙江
0顶
9小时前 来自 广东
0
有帮助,赞一个