//
// 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; } |
English