首页 > 代码库 > Spoj-NPC2015A Eefun Guessing Words
Spoj-NPC2015A Eefun Guessing Words
Eefun Guessing Words
Eefun is currently learning to read. His way of learning is unique, by trying to make every possible substring from a given string. However, when the string becomes longer, he can no longer remember all the substring. His friends want to test Eefun‘s skill by asking questions, given a string S, is there any substring that begins with letter X and ends with letter Y? According to Eefun, each substring contains at least 2 letters. As the given string S is pretty big, Eefun need your help to answer his friend‘s questions
Input
First line of input contain a single string S which was given by his friends.
Second line contain a number N, the number of questions that Eefun‘s friends ask.
Next N lines each consists of 2 characters, X and Y
Output
For each questions, output a single string "YA" if the substring exists, or "TIDAK" otherwise
(YA means yes and TIDAK means no in Indonesian)
Example
Input: HALO
4
H O
L O
A O
O L
Output: YA
YA
YA
TIDAK
Constraints:
- ‘A‘ ≤ X,Y ≤ ‘Z‘
- 1 ≤ |S| ≤ 1.000.000
- 1 ≤ N ≤ 1.000.000
记一下每个字母第一次和最后一次出现的位置就好了
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<cstdlib> 5 #include<algorithm> 6 #include<cmath> 7 #include<queue> 8 #include<deque> 9 #include<set> 10 #include<map> 11 #include<ctime> 12 #define LL long long 13 #define inf 0x7ffffff 14 #define pa pair<int,int> 15 #define mkp(a,b) make_pair(a,b) 16 #define pi 3.1415926535897932384626433832795028841971 17 #define mod 100007 18 using namespace std; 19 inline LL read() 20 { 21 LL x=0,f=1;char ch=getchar(); 22 while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} 23 while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();} 24 return x*f; 25 } 26 int fst[210],lst[210]; 27 char s[1000010],x,y; 28 int n,q; 29 int main() 30 { 31 while (~scanf("%s",s+1)) 32 { 33 memset(fst,0,sizeof(fst)); 34 memset(lst,0,sizeof(lst)); 35 n=strlen(s+1); 36 for (int i=1;i<=n;i++) 37 { 38 if (!fst[s[i]])fst[s[i]]=i; 39 lst[s[i]]=i; 40 } 41 q=read(); 42 for (int i=1;i<=q;i++) 43 { 44 scanf(" %c %c",&x,&y); 45 if (fst[x]&&fst[y]&&fst[x]<lst[y])puts("YA"); 46 else puts("TIDAK"); 47 } 48 } 49 }
Spoj-NPC2015A Eefun Guessing Words