#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"); } } |