// // main.cpp // Skwarki [B] // // Created by Jędrzej Dudzicz on 14/12/2018. // Copyright © 2018 Jędrzej Dudzicz. All rights reserved. // #include <iostream> #include <cmath> #include <cstdio> #include <algorithm> #include <utility> #include <vector> #define pb push_back using namespace std; int n,k,p; long long odp[1005][1005]; /* vector<int>pom,pom1,t; bool odw[21],odw1[21]; long long wynik[21]; void rek(int ile){ if(ile==n){ pom.clear(); int licz=n,wyn=0; for(int i=0;i<n;i++){pom.pb(t[i]);} // printf("\n"); for(int i=0;i<=pom.size();i++){odw[i]=0;} while(!kolejka.empty())kolejka.pop(); while(licz>1){ for(int i=0;i<pom.size();i++){odw[i]=0;} for(int i=0;i<pom.size();i++){ if(i==0&&pom[i]>pom[i+1]){ odw[i+1]=1; } if(i==pom.size()-1&&pom[pom.size()-1]>pom[pom.size()-2]){ odw[pom.size()-2]=1; } if(i>0&&i<pom.size()-1&&pom[i]>pom[i+1]){ odw[i+1]=1; } if(i>0&&i<pom.size()-1&&pom[i]>pom[i-1]){ odw[i-1]=1; } } for(int i=0;i<pom.size();i++){ if(odw[i]==0){ pom1.pb(pom[i]); } else licz--; } pom.clear(); pom=pom1; pom1.clear(); wyn++; } if(wyn==2){ for(int i=0;i<n;i++){printf("%d ",t[i]);} printf("\n"); } wynik[wyn]++; } else{ for(int i=1;i<=n;i++){ if(odw1[i]==0){ odw1[i]=1; t.pb(i); rek(ile+1); t.pop_back(); odw1[i]=0; } } } } */ int main(){ odp[2][1]=2;odp[3][1]=4;odp[3][2]=2; odp[4][1]=8;odp[4][2]=16;odp[5][1]=16;odp[5][2]=100;odp[5][3]=4; odp[6][1]=32;odp[6][2]=616;odp[6][3]=72; odp[7][1]=64;odp[7][2]=4024;odp[7][3]=952; odp[8][1]=128;odp[8][2]=28512;odp[8][3]=11680; odp[9][1]=256;odp[9][2]=219664;odp[9][3]=142800;odp[9][4]=160; odp[10][1]=512;odp[10][2]=1831712;odp[10][3]=1788896;odp[10][4]=7680; odp[11][1]=1024;odp[11][2]=16429152;odp[11][3]=23252832;odp[11][4]=233792; odp[12][1]=2048;odp[12][2]=157552000;odp[12][3]=315549312;odp[12][4]=5898240; scanf("%d%d%d",&n,&k,&p); if(n<=12){ printf("%lld\n",odp[n][k]%(long long)p); return 0; } else if(k==1){ long long pom=1; for(int i=1;i<=n-1;i++){ pom=(pom*2)%p; } printf("%lld",pom%p); return 0; } else{ printf("0\n"); return 0; } /* printf("%lld\n",odp[n][k]%(long long)p); for(int i=1;i<=n;i++){printf("%lld ",wynik[i]);} */ 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 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | // // main.cpp // Skwarki [B] // // Created by Jędrzej Dudzicz on 14/12/2018. // Copyright © 2018 Jędrzej Dudzicz. All rights reserved. // #include <iostream> #include <cmath> #include <cstdio> #include <algorithm> #include <utility> #include <vector> #define pb push_back using namespace std; int n,k,p; long long odp[1005][1005]; /* vector<int>pom,pom1,t; bool odw[21],odw1[21]; long long wynik[21]; void rek(int ile){ if(ile==n){ pom.clear(); int licz=n,wyn=0; for(int i=0;i<n;i++){pom.pb(t[i]);} // printf("\n"); for(int i=0;i<=pom.size();i++){odw[i]=0;} while(!kolejka.empty())kolejka.pop(); while(licz>1){ for(int i=0;i<pom.size();i++){odw[i]=0;} for(int i=0;i<pom.size();i++){ if(i==0&&pom[i]>pom[i+1]){ odw[i+1]=1; } if(i==pom.size()-1&&pom[pom.size()-1]>pom[pom.size()-2]){ odw[pom.size()-2]=1; } if(i>0&&i<pom.size()-1&&pom[i]>pom[i+1]){ odw[i+1]=1; } if(i>0&&i<pom.size()-1&&pom[i]>pom[i-1]){ odw[i-1]=1; } } for(int i=0;i<pom.size();i++){ if(odw[i]==0){ pom1.pb(pom[i]); } else licz--; } pom.clear(); pom=pom1; pom1.clear(); wyn++; } if(wyn==2){ for(int i=0;i<n;i++){printf("%d ",t[i]);} printf("\n"); } wynik[wyn]++; } else{ for(int i=1;i<=n;i++){ if(odw1[i]==0){ odw1[i]=1; t.pb(i); rek(ile+1); t.pop_back(); odw1[i]=0; } } } } */ int main(){ odp[2][1]=2;odp[3][1]=4;odp[3][2]=2; odp[4][1]=8;odp[4][2]=16;odp[5][1]=16;odp[5][2]=100;odp[5][3]=4; odp[6][1]=32;odp[6][2]=616;odp[6][3]=72; odp[7][1]=64;odp[7][2]=4024;odp[7][3]=952; odp[8][1]=128;odp[8][2]=28512;odp[8][3]=11680; odp[9][1]=256;odp[9][2]=219664;odp[9][3]=142800;odp[9][4]=160; odp[10][1]=512;odp[10][2]=1831712;odp[10][3]=1788896;odp[10][4]=7680; odp[11][1]=1024;odp[11][2]=16429152;odp[11][3]=23252832;odp[11][4]=233792; odp[12][1]=2048;odp[12][2]=157552000;odp[12][3]=315549312;odp[12][4]=5898240; scanf("%d%d%d",&n,&k,&p); if(n<=12){ printf("%lld\n",odp[n][k]%(long long)p); return 0; } else if(k==1){ long long pom=1; for(int i=1;i<=n-1;i++){ pom=(pom*2)%p; } printf("%lld",pom%p); return 0; } else{ printf("0\n"); return 0; } /* printf("%lld\n",odp[n][k]%(long long)p); for(int i=1;i<=n;i++){printf("%lld ",wynik[i]);} */ return 0; } |