#include <string>
#include <iostream>
#include <set>
using namespace std;
const int MOD = 1000000007;
bool isIn(string fan, string s1, string s2){
string s = s1+s2;
int fLen = fan.length(), sLen=s.length(), pos=0;
bool result=true;
if (fLen>sLen) return false;
for (int i=0; i < fLen; i++){
pos = s.find(fan[i],pos)+1;
if((pos == 0) || (pos>sLen)){
result=false;
break;
}
}
return result;
}
int main()
{
int n;
cin >> n;
string drybl[n];
set<string> fanStr[600];
int fanArr[n][n];
for (int i=0; i<n; i++){
for (int j=0; j<n; j++){
fanArr[i][j] = 0;
}
}
int maxLen=0, dLen;
for (int i=0; i<n; i++){
cin >> drybl[i];
dLen = drybl[i].length();
if (dLen > maxLen) maxLen = dLen;
}
string newS;
fanStr[0].insert("LP");
for (int i=1; i<maxLen; i++){
for(auto& shortStr: fanStr[i-1]){
for (int j=0; j<=shortStr.length(); j++){
newS=shortStr.substr(0,j)+"LP"+shortStr.substr(j,shortStr.length()-j);
fanStr[i].insert(newS);
}
}
}
for(int k=0; k<maxLen; k++){
for(auto& searchS: fanStr[k]){
//cout << searchS<< endl;
for (int i=0; i<n; i++){
for (int j=0; j<n; j++){
if (isIn(searchS,drybl[i],drybl[j])==true) {
fanArr[i][j]=(fanArr[i][j]+1) % MOD;
}
}
}
}
}
for (int i=0; i<n; i++){
for (int j=0; j<n; j++){
cout << fanArr[i][j] <<" ";
}
cout << endl;
}
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 62 63 64 65 66 67 68 69 70 71 72 | #include <string> #include <iostream> #include <set> using namespace std; const int MOD = 1000000007; bool isIn(string fan, string s1, string s2){ string s = s1+s2; int fLen = fan.length(), sLen=s.length(), pos=0; bool result=true; if (fLen>sLen) return false; for (int i=0; i < fLen; i++){ pos = s.find(fan[i],pos)+1; if((pos == 0) || (pos>sLen)){ result=false; break; } } return result; } int main() { int n; cin >> n; string drybl[n]; set<string> fanStr[600]; int fanArr[n][n]; for (int i=0; i<n; i++){ for (int j=0; j<n; j++){ fanArr[i][j] = 0; } } int maxLen=0, dLen; for (int i=0; i<n; i++){ cin >> drybl[i]; dLen = drybl[i].length(); if (dLen > maxLen) maxLen = dLen; } string newS; fanStr[0].insert("LP"); for (int i=1; i<maxLen; i++){ for(auto& shortStr: fanStr[i-1]){ for (int j=0; j<=shortStr.length(); j++){ newS=shortStr.substr(0,j)+"LP"+shortStr.substr(j,shortStr.length()-j); fanStr[i].insert(newS); } } } for(int k=0; k<maxLen; k++){ for(auto& searchS: fanStr[k]){ //cout << searchS<< endl; for (int i=0; i<n; i++){ for (int j=0; j<n; j++){ if (isIn(searchS,drybl[i],drybl[j])==true) { fanArr[i][j]=(fanArr[i][j]+1) % MOD; } } } } } for (int i=0; i<n; i++){ for (int j=0; j<n; j++){ cout << fanArr[i][j] <<" "; } cout << endl; } return 0; } |
English