#include<iostream> #include<algorithm> #include<vector> using namespace std; int n,k,mod; int t[1005]; int wynik=0; int sprawdz(){ vector<int>v,vk; int tury=0; for(int i=0;i<n;++i)v.push_back(t[i]); while(v.size()>1){ vk.clear(); for(int i=0;i<v.size();++i){ if(i==0){ if(v[i+1]<v[i])vk.push_back(v[i]); } else if(i<v.size()-1){ if(v[i-1]<v[i]&&v[i+1]<v[i])vk.push_back(v[i]); } else{ if(v[i-1]<v[i])vk.push_back(v[i]); } } v.clear(); for(int i=0;i<vk.size();++i)v.push_back(vk[i]); ++tury; } if(tury==k)return 1; return 0; } int main(){ ios::sync_with_stdio(false); cin>>n>>k>>mod; for(int i=0;i<n;++i)t[i]=i+1; do{ if(sprawdz()==1){ ++wynik; wynik%=mod; //for(int i=0;i<n;++i){ // cout<<t[i]<<" "; // } //cout<<"\n"; } }while(next_permutation(t,t+n)); cout<<wynik; }
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 | #include<iostream> #include<algorithm> #include<vector> using namespace std; int n,k,mod; int t[1005]; int wynik=0; int sprawdz(){ vector<int>v,vk; int tury=0; for(int i=0;i<n;++i)v.push_back(t[i]); while(v.size()>1){ vk.clear(); for(int i=0;i<v.size();++i){ if(i==0){ if(v[i+1]<v[i])vk.push_back(v[i]); } else if(i<v.size()-1){ if(v[i-1]<v[i]&&v[i+1]<v[i])vk.push_back(v[i]); } else{ if(v[i-1]<v[i])vk.push_back(v[i]); } } v.clear(); for(int i=0;i<vk.size();++i)v.push_back(vk[i]); ++tury; } if(tury==k)return 1; return 0; } int main(){ ios::sync_with_stdio(false); cin>>n>>k>>mod; for(int i=0;i<n;++i)t[i]=i+1; do{ if(sprawdz()==1){ ++wynik; wynik%=mod; //for(int i=0;i<n;++i){ // cout<<t[i]<<" "; // } //cout<<"\n"; } }while(next_permutation(t,t+n)); cout<<wynik; } |