Submission #339625

#TimeUsernameProblemLanguageResultExecution timeMemory
339625Ahmad_HasanBeautiful row (IZhO12_beauty)C++17
0 / 100
1 ms492 KiB
#include <bits/stdc++.h> using namespace std; int n; int nums[25]; int cnt=0; vector<vector<int> > dp; int slv(int msk=0,int lstidx=-1){ if(msk==(1<<n)-1){ return 1; } int cnt=0; if(lstidx!=-1&&dp[msk][lstidx]!=-1) return dp[msk][lstidx]; for(int i=0;i<n;i++){ if(!(msk&(1<<i))){ if(lstidx==-1){ cnt+=slv(msk|(1<<i),i); continue; } int f=0; { int num1=nums[lstidx]; int num2=nums[i]; int cntb2=0; while(num1||num2){ cntb2-=num1%2; cntb2+=num2%2; num1/=2; num2/=2; } if(!cntb2){ f=1; } num1=nums[lstidx]; num2=nums[i]; int cntb3=0; while(num1||num2){ cntb3-=num1%3==1; cntb3+=num2%3==1; num1/=3; num2/=3; } if(!cntb3){ f=1; } } if(f){ cnt+=slv(msk|(1<<i),i); } } } return dp[msk][lstidx]=cnt; } int main() { cin>>n; for(int i=0;i<n;i++){ cin>>nums[i]; } dp=vector<vector<int> >((1<<n)+5,vector<int>(n+5,-1)); cout<<slv()<<'\n'; return 0; } /**** 1 8 4 3 1 4 3 1 8 8 7 1 100 9 1 100 2 1 3 2 4 3 5 4 100 99 99 98 98 97 97 96 19 3 6 3 12 9 2000000000 1000000000 1000000000 3 1000000000 1000000000 */
#Verdict Execution timeMemoryGrader output
Fetching results...