#include<bits/stdc++.h> using namespace std; const int mod=1000000007; bool fantastyczny(string s){ int l,p,i; l=p=0; for(i=0;i<(int)s.size();i++){ if(s[i]=='L') l++; if(s[i]=='P') p++; if(p>l) return false; } return l==p; } bool podciag(string s,string S){ int i,j; j=0; for(i=0;i<(int)s.size();i++){ while(j<(int)S.size() && S[j]!=s[i]) j++; if(j==(int)S.size()) return false; j++; } return true; } int licz(string s){ int n,w,i,j,l; string tmp; w=0; for(n=1;n<=(int)s.size();n++){ for(j=0;j<1<<n;j++){ tmp=""; l=j; for(i=0;i<n;i++){ tmp+="LP"[l%2]; l/=2; } //~ cout<<tmp<<" "<<fantastyczny(tmp)<<" "<<podciag(tmp,s)<<"\n"; if(fantastyczny(tmp) && podciag(tmp,s)) w=(w+1)%mod; } } return w; } int main(){ ios_base::sync_with_stdio(false); int n,i,j; cin>>n; string arr[n]; for(i=0;i<n;i++) cin>>arr[i]; for(i=0;i<n;i++){ for(j=0;j<n;j++) cout<<licz(arr[i]+arr[j])<<" "; cout<<"\n"; } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | #include<bits/stdc++.h> using namespace std; const int mod=1000000007; bool fantastyczny(string s){ int l,p,i; l=p=0; for(i=0;i<(int)s.size();i++){ if(s[i]=='L') l++; if(s[i]=='P') p++; if(p>l) return false; } return l==p; } bool podciag(string s,string S){ int i,j; j=0; for(i=0;i<(int)s.size();i++){ while(j<(int)S.size() && S[j]!=s[i]) j++; if(j==(int)S.size()) return false; j++; } return true; } int licz(string s){ int n,w,i,j,l; string tmp; w=0; for(n=1;n<=(int)s.size();n++){ for(j=0;j<1<<n;j++){ tmp=""; l=j; for(i=0;i<n;i++){ tmp+="LP"[l%2]; l/=2; } //~ cout<<tmp<<" "<<fantastyczny(tmp)<<" "<<podciag(tmp,s)<<"\n"; if(fantastyczny(tmp) && podciag(tmp,s)) w=(w+1)%mod; } } return w; } int main(){ ios_base::sync_with_stdio(false); int n,i,j; cin>>n; string arr[n]; for(i=0;i<n;i++) cin>>arr[i]; for(i=0;i<n;i++){ for(j=0;j<n;j++) cout<<licz(arr[i]+arr[j])<<" "; cout<<"\n"; } return 0; } |