#include<bits/stdc++.h>
using namespace std;
char wejscie[610];
string d[610];
const long long mod = 1000000000+7;
long long pol[1210];
long long pop[1210];
long long o[1210];
long long policz(const string &a){
//cout<<a<<"\n";
for(int i=0;i<=(int)a.size()+2;i++)
{
o[i] = 0;
pol[i] = 0;
pop[i] = 0;
}
int i=0;
while(i<(int)a.size() && a[i]!='L')
i++;
o[1] = 1;
i++;
while(i<(int)a.size())
{
if(a[i]=='L')
{
for(int j=(int)a.size()-1;j>0;j--){
pol[j] = o[j];
o[j] = (mod+o[j-1]-pol[j-1]+o[j])%mod;
}
pol[0] = o[0];
}
else
{
// int costam = min(i+1, (int)a.size());
for(int j=0;j<(int)a.size();j++){
pop[j] = o[j];
o[j] = (mod+o[j+1]-pop[j+1]+o[j])%mod;
}
pop[(int)a.size()-1] = o[(int)a.size()-1];
// wynik = (wynik + o[0])%mod;
}
i++;
}
return o[0];
}
int main()
{
int n, i, j;
scanf("%d", &n);
for(i=0;i<n;i++){
scanf("%s", wejscie);
j = 0;
while(wejscie[j]=='L' || wejscie[j]=='P'){
d[i]+=wejscie[j];
j++;
}
}
for(i=0;i<n;i++){
cerr<<i;
for(j=0;j<n;j++){
printf("%lld ", policz(d[i]+d[j]));
}
printf("\n");
}
}
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 | #include<bits/stdc++.h> using namespace std; char wejscie[610]; string d[610]; const long long mod = 1000000000+7; long long pol[1210]; long long pop[1210]; long long o[1210]; long long policz(const string &a){ //cout<<a<<"\n"; for(int i=0;i<=(int)a.size()+2;i++) { o[i] = 0; pol[i] = 0; pop[i] = 0; } int i=0; while(i<(int)a.size() && a[i]!='L') i++; o[1] = 1; i++; while(i<(int)a.size()) { if(a[i]=='L') { for(int j=(int)a.size()-1;j>0;j--){ pol[j] = o[j]; o[j] = (mod+o[j-1]-pol[j-1]+o[j])%mod; } pol[0] = o[0]; } else { // int costam = min(i+1, (int)a.size()); for(int j=0;j<(int)a.size();j++){ pop[j] = o[j]; o[j] = (mod+o[j+1]-pop[j+1]+o[j])%mod; } pop[(int)a.size()-1] = o[(int)a.size()-1]; // wynik = (wynik + o[0])%mod; } i++; } return o[0]; } int main() { int n, i, j; scanf("%d", &n); for(i=0;i<n;i++){ scanf("%s", wejscie); j = 0; while(wejscie[j]=='L' || wejscie[j]=='P'){ d[i]+=wejscie[j]; j++; } } for(i=0;i<n;i++){ cerr<<i; for(j=0;j<n;j++){ printf("%lld ", policz(d[i]+d[j])); } printf("\n"); } } |
English