NOIP模拟题——神秘大门

Posted Deadshotz的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NOIP模拟题——神秘大门相关的知识,希望对你有一定的参考价值。

【题目描述】
最近小K大牛经过调查发现,在WZland的最南方——WZ Antarctica 出现了奇怪
的磁场反应。为了弄清楚这一现象,小K 大牛亲自出马,来到了WZ Antarctica。
小K大牛发现WZ Antarctica 出现了一道神秘的大门。人总有好奇心,小K大牛想打开
这扇神秘大门,看门的后面究竟是什么东西,但用尽什么办法也不能打开这扇门。
突然,门上出现了一些奇怪的字符。凭着敏锐的直觉,小K 认为这些符号就是打
开这扇门的关键, 于是小K 抓紧时间开始研究这些符号。
经过一些时间的研究,小K 大牛发现这些符号其实是一串密码,只有破解了
这个密码, 才能打开那扇神秘大门。这个密码十分简单,他给出了两个很长的字
符串A 和B,你只需要判断B 是否在A 中出现过就可以了,当然如果B 在A
中出现,那么你还需要输出B 的字符在A 中依次出现的位置。
这里解释一下B 在A 中出现的概念,设A=S1S2…SN,B= T1T2…TM,如果存
在一组数K:K1<K2<…<KM,使得B=SK1SK2…SKM,那么就可以认为B 在A 出现
过。比如说A=sdfesad, B=sfsad,那么B 在A 中出现过,因为B 中的字符在A
中依次出现的位置为1 3 5 6 7。
这个解密过程实在太简单了,于是小K 大牛就将这个任务交给了你。由于小K
大牛十分着急,他只给了你1s 的时间。
【输入】
输入数据包含2 行,分别包含一个字符串,第一行输入的是字符串A,第二
行输入的是字符串B。
【输出】
第一行输出一个字符串“Yes”或“No”,如果B 在A 中出现,那么输出“Yes”,
否则输出“No”。
如果你的第一行输出“Yes”,那么在第接下来若干行你需要输出一组数K,使
得B=SK1SK2…SKM,每行一个数;否则第二行为空。如果存在多组数据满足条件,
你需要输出字典序最大的一组。
【输入输出样例1】
door.in     door.out
sdfesad    Yes
sfsad        1

               3

               5

               6

               7 
【输入输出样例2】
door.in      door.out
abcdef       No
acdefg

【数据范围】

字符串长度1≤n≤1e6

 

倒着找,向前贪心,一定得到字典序最大或-1。

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdlib>
 5 using namespace std;
 6 const int maxn=1e6+7;
 7 char a[maxn],b[maxn];
 8 int q[maxn];int temp3=0;
 9 int temp1,temp2;
10 int main()
11 {
12     freopen("door.in","r",stdin);
13     freopen("door.out","w",stdout);
14     scanf("%s",a);
15     scanf("%s",b);
16     temp1=strlen(a)-1;
17     temp2=strlen(b)-1;
18     while(temp2>=0)
19     {
20         while(a[temp1]!=b[temp2])
21         {
22             temp1--;
23             if(temp1<temp2)
24             {
25                 printf("No");
26                 exit(0);
27             }
28         }
29         q[++temp3]=temp1;
30         temp2--;temp1--;
31     }
32     printf("Yes\n");
33     for(int i=temp3;i>=1;i--)
34     printf("%d\n",q[i]+1);
35     return 0;
36 }

 

以上是关于NOIP模拟题——神秘大门的主要内容,如果未能解决你的问题,请参考以下文章

带有神秘附加字符的 Javascript Date getTime() 代码片段

ViewPager 片段之间的神秘分隔线?

XJOI NOIP模拟题1

noip模拟赛 写代码

神经网络:神秘的ReLu

NOIP模拟赛16