思路1:字典树存每个串,然后dfs遍历是否存在。这里有个技巧,如果每次都重新初始化字典树为-1,那么会超时,所以我先初始化为-1,然后设一个Case,每个test时Case都++,那么只要开一个数组判断是否等于Case,如果等于就说明有这条路,不等则没有。这道题用字典树做要注意剪枝。

思路2:这道题能随机看命过

代码1:

#include<queue>
#include<cstring>
#include<set>
#include<map>
#include<stack>
#include<cmath>
#include<vector>
#include<cstdio>
#include<iostream>
#include<algorithm>
typedef long long ll;
const int maxn = 1e4 + ;
const int seed = ;
const ll MOD = 1e9 + ;
const int INF = 0x3f3f3f3f;
using namespace std;
int n, m, k, length, Case;
char s[maxn], ans[];
int trie[maxn * ][], cs[maxn * ][], tot;
void update(int st){
int p = ;
for(int i = ; i < m; i++){
if(st + i > n) return;
int v = s[st + i] - 'a';
if(v >= k) return; //剪枝
if(cs[p][v] != Case){
trie[p][v] = ++tot;
cs[p][v] = Case;
}
p = trie[p][v];
}
}
bool dfs(int p, int len){
if(len > m) return false;
for(int i = ; i < k; i++){
if(cs[p][i] != Case){
ans[length++] = 'a' + i;
return true;
}
else if(dfs(trie[p][i], len + )){
ans[length++] = 'a' + i;
return true;
}
}
return false;
}
int main(){
int t;
Case = ;
memset(cs, -, sizeof(cs));
scanf("%d", &t);
while(t--){
Case++;
tot = ;
scanf("%d%d%d", &n ,&m, &k);
scanf("%s", s + );
for(int i = ; i <= n; i++){
update(i);
}
length = ;
dfs(, );
for(int i = length - ; i >= ; i--)
printf("%c", ans[i]);
printf("\n");
}
return ;
}

代码2:

#include<queue>
#include<cstring>
#include<set>
#include<map>
#include<stack>
#include<string>
#include<cmath>
#include<vector>
#include<cstdio>
#include<iostream>
#include<algorithm>
typedef long long ll;
const int maxn = 1e4 + ;
const int seed = ;
const ll MOD = 1e9 + ;
const int INF = 0x3f3f3f3f;
using namespace std;
int n, m, k;
char s[maxn];
int main(){
int t;
srand(time(NULL));
scanf("%d", &t);
while(t--){
map<string, int> st;
scanf("%d%d%d", &n ,&m, &k);
scanf("%s", s + );
for(int i = ; i <= n - m + ; i++){
string ss;
for(int j = i; j < i + m; j++){
ss += s[j];
}
st[ss] = ;
}
string ans;
while(true){
ans = "";
for(int i = ; i < m; i++){
ans += 'a' + rand() % k;
}
if(st[ans] == ){
cout << ans << endl;
break;
}
}
}
return ;
}

最新文章

  1. Spark 自定义累加变量(Accmulator)AccumulatorParam
  2. js与jquery的区别
  3. BZOJ3577 : 玩手机
  4. python echo服务器和客户端(客户端可以用telnet之类的)
  5. dom4j解析接口使用SOAP传递的xml
  6. 关于MYSQL存储中文问题
  7. [ACdream]女神教你字符串——导字符串
  8. Leetcode#500. Keyboard Row(键盘行)
  9. pdf生成库-libharu编译
  10. Neutron :默认通过 dnsmasq 实现 DHCP 功能----Namespace
  11. Vue route的使用
  12. 20165223《JAVA程序设计》第一周学习总结
  13. (转)Putty server refused our key的三种原因和解决方法
  14. About the Cron Expression
  15. Linux CPU实时监控工具
  16. Cow Contest---poj3660
  17. Spring Boot数据库交互
  18. [14] 齿轮(Gear Wheel)图形的生成算法
  19. NSIS安装程序制作工具判断系统是否安装.NET
  20. 监控操作系统的CPU、内存、磁盘

热门文章

  1. mybatis之入门
  2. IO流(3)删除文件或文件夹
  3. nodejs(三)Buffer module &amp; Byte Order
  4. Linux中Kill掉进程的10种方法
  5. Chrome Input框老是有输入记录的终极解决方案
  6. matlab 以excel格式将字符串数组写入TXT文件
  7. string.Format字符串格式说明(转)
  8. STA分析(五) parastics
  9. 80. Remove Duplicates from Sorted Array II(双指针)
  10. HIT 2051