标签:like print sid sub des rds cal identity hang
题意&思路:hdu 1238 数据的加强版 需要注意优化点已在代码处标记
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<string> #include<vector> #include<stack> #include<bitset> #include<cstdlib> #include<cmath> #include<set> #include<list> #include<deque> #include<map> #include<queue> #define ll long long int using namespace std; inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;} inline ll lcm(ll a,ll b){return a/gcd(a,b)*b;} int moth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int dir[4][2]={1,0 ,0,1 ,-1,0 ,0,-1}; int dirs[8][2]={1,0 ,0,1 ,-1,0 ,0,-1, -1,-1 ,-1,1 ,1,-1 ,1,1}; const int inf=0x3f3f3f3f; const ll mod=1e9+7; int n; string s[4007]; int nextt[500]; void getnext(string s){ nextt[1]=0; int len=s.length(); for(int i=2,j=0;i<=len;i++){ while(j>0&&s[i-1]!=s[j]) j=nextt[j]; if(s[i-1]==s[j]) j++; nextt[i]=j; } } bool kmp(string t,string p){ int len1=p.length(); int len2=t.length(); for(int i=1,j=0;i<=len1;i++){ while(j>0&&p[i-1]!=t[j]) j=nextt[j]; if(p[i-1]==t[j]) j++; if(j==len2) return true; } return false; } int main(){ ios::sync_with_stdio(false); while(cin>>n&&n){ for(int i=0;i<n;i++) cin>>s[i]; int len=s[0].length(); string ans=""; for(int i=len;i>=1;i--){ for(int j=0;j<=len-i;j++){ string temp=s[0].substr(j,i); getnext(temp); bool f=1; for(int k=0;k<n;k++) if(!kmp(temp,s[k])){ f=0; break; //碰到假就弹出 } if(f){ if(ans.size()<temp.size()) ans=temp; else if(ans.size()==temp.size()) ans=min(ans,temp); } } } if(ans.size()<1) cout<<"IDENTITY LOST"<<endl; else cout<<ans<<endl; } return 0; }
hdu 2328 Corporate Identity(kmp)
标签:like print sid sub des rds cal identity hang
原文地址:https://www.cnblogs.com/wmj6/p/10504938.html