pipioj 1039: 重複子序列問題(貪心)

 1 #define bug(x) cout<<#x<<" is "<<x<<endl
 2 #define IO std::ios::sync_with_stdio(0)
 3 #include <bits/stdc++.h>
 4 using namespace  std;
 5 typedef long long ll;
 6 #define mk make_pair
 7 #define pb push_back
 8 const int inf=2147483647;
 9 const int N=1e5+10;
10 char s[N];
11 char t[N];
12 
13 
14 int a[N][26];
15 int vis[26];
16 int ok[N][26];
17 
18 int main(){
19     while(~scanf("%s",s+1)){
20         int n=strlen(s+1);
21         scanf("%s",t+1);
22         int m=strlen(t+1);
23         for(int i=0;i<26;i++)a[n+1][i]=0 ,vis[i]=0;
24         for(int i=n;i>=0;i--){
25             vis[s[i]-'a']=1;
26             for(int j=0;j<26;j++){
27                 if(s[i]==j+'a')a[i][j]=i;
28                 else a[i][j]=a[i+1][j];
29             }
30         }
31         int ans=1,f=0,f1=0,j=1;
32         for(int i=1;i<=m;){
33             int x=t[i]-'a';
34             if(!vis[x]){
35                 f1=1;
36                 break;
37             }
38             j=a[j][x];
39             if(j)j++,i++;
40             else{
41                 ans++;
42                 j=1;
43             }
44         }
45         if(f1){
46             printf("-1\n");
47             continue;
48         }
49         printf("%d\n",ans);
50 
51     }
52 }
53 /*
54 ab
55 abab
56 
57 abb
58 bbaa
59 
60 abc
61 bca
62 
63 abb
64 abbabbabb
65 */

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章