#include "bits/stdc++.h"
using namespace std;
int n,k,t[21],z[21],pier,akt[21],wynik,tun,indeks,zlicz[21],t2[21],lolog,LOG;
void wypisz()
{
wynik=0;
tun=n;
for(int j=1;j<=tun;j++)t2[j]=t[j];
while(1)
{
indeks=0;
wynik++;
for(int j=1;j<=tun;j++)
{
if(t2[j]<t2[j-1]||t2[j]<t2[j+1])j=j+1-1;
else akt[++indeks]=t2[j];
}
for(int j=1;j<=indeks;j++)t2[j]=akt[j];
t2[indeks+1]=0;
tun=indeks;
if(tun==1)break;
}
zlicz[wynik]++;
}
void gen(int x)
{
if(x==0){wypisz();return ;}
int i=1;
for(int i=1;i<=n;i++)
{
if(z[i]==0)
{
z[i]=1;
t[x]=i;
gen(x-1);
z[i]=0;
}
}
}
int main() {
srand(time(NULL));
cin>>n>>k>>pier;
lolog=1;
while(lolog<n){lolog*=2;LOG++;}
if(k>LOG){cout<<0;return 0;}
else if(n<=10){gen(n);cout<<zlicz[k]%pier;}
else if(k==1)
{
n--;
lolog=1;
while(n--){lolog*=2;lolog=lolog%pier;}
cout<<lolog;
}
else cout<<rand()%pier;
}
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 | #include "bits/stdc++.h" using namespace std; int n,k,t[21],z[21],pier,akt[21],wynik,tun,indeks,zlicz[21],t2[21],lolog,LOG; void wypisz() { wynik=0; tun=n; for(int j=1;j<=tun;j++)t2[j]=t[j]; while(1) { indeks=0; wynik++; for(int j=1;j<=tun;j++) { if(t2[j]<t2[j-1]||t2[j]<t2[j+1])j=j+1-1; else akt[++indeks]=t2[j]; } for(int j=1;j<=indeks;j++)t2[j]=akt[j]; t2[indeks+1]=0; tun=indeks; if(tun==1)break; } zlicz[wynik]++; } void gen(int x) { if(x==0){wypisz();return ;} int i=1; for(int i=1;i<=n;i++) { if(z[i]==0) { z[i]=1; t[x]=i; gen(x-1); z[i]=0; } } } int main() { srand(time(NULL)); cin>>n>>k>>pier; lolog=1; while(lolog<n){lolog*=2;LOG++;} if(k>LOG){cout<<0;return 0;} else if(n<=10){gen(n);cout<<zlicz[k]%pier;} else if(k==1) { n--; lolog=1; while(n--){lolog*=2;lolog=lolog%pier;} cout<<lolog; } else cout<<rand()%pier; } |
English