Gym 101745 D.Stamp Stamp Stamp

时间:2023-03-08 17:29:22
Gym 101745 D.Stamp Stamp Stamp

题目网页链接: http://codeforces.com/gym/101745/problem/D

思路:首先可以确保能够成功染色的字符串都是结果串的子串,那么O(n^2)枚举子串之后dp转移即可。

 #include<bits/stdc++.h>
 using namespace std;

 typedef long long ll;
 ;
 ;
 const int inf=0x3f3f3f3f;
 ;
 const double pi=acos(-1.0);
 #define mem(s,v) memset(s,v,sizeof(s))
 #define pdd pair<double,double>
 #define pii pair<int,int>

 string s,ss;
 set<string> se;
 ][];
 int n;

 int judge(string ss){
     ]!=s[]) ;
     memset(dp,,sizeof(dp));
     dp[][]=;
     int m=ss.size();
     ;i<n-;++i){
         ;j<m;++j){
             if(!dp[i][j]) continue;
             ]==ss[(j+)%m]) dp[i+][(j+)%m]=;
             ]==ss[]) dp[i+][]=;
         }
         ]){
             ;j<m;++j){
                 ]==ss[j]) dp[i+][j]=;
             }
         }
     }
     ][m-];
 }

 int main(){
     cin>>s;
     n=s.size();
     ;i<n-;++i){
         for(int j=i;j<n;++j){
             ss=s.substr(i,j-i+);
             if(judge(ss)) se.insert(ss);
         }
     }
     for(auto it : se){
         cout<<it<<endl;
     }
     ;
 }