#include <stdio.h> #include <bitset> #include <set> #include <vector> #include <string> using namespace std; char tab[610][610]; int n; set<string> se; char s[1220]; int k; char gent[1220]; int lent; void gen(int i, int l) { //printf("%d %d\n",i,l); if(i>=k) { if(i==k && l==0) { auto b = se.insert(string(gent)); //if(b.second) printf("gent: %s\n",gent); } return; } if(k-i < l)return; if(s[i] == 'L') { gent[lent++]='L'; gent[lent]=0; gen(i+1,l+1); lent--; gent[lent]=0; } else if (l>0) { gent[lent++]='P'; gent[lent]=0; gen(i+1,l-1); lent--; gent[lent]=0; } gen(i+1,l); } int policz() { se.clear(); gent[0]=0; lent=0; gen(0,0); return se.size(); } int main() { scanf("%d\n",&n); for(int i=0;i<n;i++) { scanf("%s\n",tab[i]); } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { k=0; for(char *w=tab[i];*w;w++) s[k++]=*w; for(char *w=tab[j];*w;w++) s[k++]=*w; s[k]=0; //printf("%s\n",s); printf("%d ",policz()-1); } printf("\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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | #include <stdio.h> #include <bitset> #include <set> #include <vector> #include <string> using namespace std; char tab[610][610]; int n; set<string> se; char s[1220]; int k; char gent[1220]; int lent; void gen(int i, int l) { //printf("%d %d\n",i,l); if(i>=k) { if(i==k && l==0) { auto b = se.insert(string(gent)); //if(b.second) printf("gent: %s\n",gent); } return; } if(k-i < l)return; if(s[i] == 'L') { gent[lent++]='L'; gent[lent]=0; gen(i+1,l+1); lent--; gent[lent]=0; } else if (l>0) { gent[lent++]='P'; gent[lent]=0; gen(i+1,l-1); lent--; gent[lent]=0; } gen(i+1,l); } int policz() { se.clear(); gent[0]=0; lent=0; gen(0,0); return se.size(); } int main() { scanf("%d\n",&n); for(int i=0;i<n;i++) { scanf("%s\n",tab[i]); } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { k=0; for(char *w=tab[i];*w;w++) s[k++]=*w; for(char *w=tab[j];*w;w++) s[k++]=*w; s[k]=0; //printf("%s\n",s); printf("%d ",policz()-1); } printf("\n"); } return 0; } |