题解
2026-04-07 19:50:22
发布于:浙江
4阅读
0回复
0点赞
大家好,我是энтджей,今天是我2026年第八次正式发题解!
能不能点个赞
回归正题:
-
首先:
- 理解题意:
-
农夫约翰出门沿着一条路散步,现在他可能迷路了!
这条路上有 N 个农场(1 ≤ N ≤ 100),排成一排。不幸的是,农场没有门牌号,这让农夫约翰很难确定自己在这条路上的位置。不过,每个农场路边都有一个彩色的邮箱,所以农夫约翰希望,通过观察离他最近的邮箱的颜色,他能唯一确定自己的位置。每个邮箱的颜色由 A..Z 范围内的一个字母表示,因此整条路上 N 个邮箱的颜色序列可以用一个长度为 N 的字符串表示(只包含大写字母)。有些邮箱的颜色可能相同。
农夫约翰想知道:最小的 K 是多少,使得当他观察任意 连续 K 个邮箱 的颜色序列时,都能唯一确定这个序列在整条路上的位置。例如,假设路上邮箱的颜色序列是 "ABCDABC"。
农夫约翰不能取 K=3,因为如果他看到 "ABC",这条路上有两个可能的位置对应这个连续的颜色序列。
能让这个条件成立的最小的 K 是 4,因为如果观察任意连续 4 个邮箱的颜色序列,这个序列都能唯一确定他在路上的位置。输入格式
第一行输入一个整数 N。
第二行输入一个长度为 N 的字符串,字符范围 A..Z。输出格式
输出一个整数,表示满足条件的最小的 K。
-
- 理解题意:
-
接着
- 我想到用暴力枚举写,结果AC了
- 真题思路就是先输入,在确定长度,然后暴力枚举所有点的长度为的字符串,在暴力枚举其他所有点的长度为的字符串,判断是否一样
- 我想到用暴力枚举写,结果AC了
-
然后
-
直接写:
- 头文件打好:
#include<bits/stdc++.h> #define int long long using namespace std; signed main(){ ios::sync_with_stdio(false); cin.tie(0); return 0; }- 定义+输入:
int n; string s; cin >> n; cin >> s;- 暴力判断 + 输出:
for(int len = 1;len <= n;len++){ bool flag = true; for(int i = 0;i + len <= n && flag;i++){ for(int j = i + 1;j + len <= n && flag;j++){ if(s.substr(i,len) == s.substr(j,len)){ flag = false; } } } if(flag) { cout << len; return 0; } }
-
-
最后
- 完整代码
#include<bits/stdc++.h> #define int long long using namespace std; int n; string s; signed main(){ ios::sync_with_stdio(false); cin.tie(0); cin >> n; cin >> s; for(int len = 1;len <= n;len++){ bool flag = true; for(int i = 0;i + len <= n && flag;i++){ for(int j = i + 1;j + len <= n && flag;j++){ if(s.substr(i,len) == s.substr(j,len)){ flag = false; } } } if(flag) { cout << len; return 0; } } return 0; }
🎉完结撒花🎉
改风格了
这里空空如也




有帮助,赞一个