题目:Problem - C - Codeforces
总结:
若密码库为1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
m为2
密码为:
1 10
6 15
找子序列由图可知
代码献上:
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
void init()
{
string q; cin >> q; //密码数据库输入
int m; cin >> m; //密码长度输入
string l, r; cin >> l >> r; //密码
int it = -1; //下标指针
for (int a = 0; a < m; a++)
{
int qw = it + 1; //下标加一跳过已查到字符串下标
//解决查找函数重复查同意字符
for (char x = l[a]; x <= r[a]; x++)//遍历密码
{
int d = q.find(x, qw);//从qw下标处查找
if (d == -1) //判断在密码库中是否查到密码
{
cout << "YES" << endl; //符合密码条件输出“YES”
return; //退出
}
it = max(d,it); //将下标更新至最大为下一次查找作准备
}
}
cout << "NO" << endl; //不符合密码输出“NO”
return ;
}
int main()
{
int v; cin >> v; //测试样例
while (v--)
{
init(); //构造函数
}
return 0;
}