Submission #946554

#TimeUsernameProblemLanguageResultExecution timeMemory
946554sondos225Beautiful row (IZhO12_beauty)C++17
100 / 100
2975 ms172888 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define fast ios_base::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL); #define pb push_back #define yes "YES" #define no "NO" #define bigg INT_MAX #define debug(x) cout<<(#x)<<" = " <<x<<endl; #define all(x) x.begin(),x.end() #define sz size() #define nn '\n' #define mms(x,y) memset(x,y,sizeof(x)) #define forr(i,j,n) for (int i=j; i<n; i++) #define forn(i,j,n) for (int i=j; i>n; i--) #define fi first #define se second #define la "LA" #define cinn(x,y) for(int i=0; i<y; i++) cin>>x[i]; #define pii pair<int,int> int m2[20]; int m3[20]; int n; int dp[21][(1<<20)]; int dfs(int x, int mask) { if (mask==((1<<n)-1)) return 1; if (dp[x][mask]!=-1) return dp[x][mask]; int c=0; forr(i,0,n) { if (m2[x]==m2[i] || m3[x]==m3[i]){ if (!((1<<i)&mask)) { // mask|=; c+=dfs(i,(mask|(1<<i))); // mask^=(1<<i); } } } return dp[x][mask]=c; } signed main() { // #ifndef LOCAL // freopen("lifeguards.in","r",stdin); // freopen("lifeguards.out","w", stdout); // #endif fast // int n; cin>>n; int a[n]; mms(dp,-1); forr(i,0,n) { cin>>a[i]; int x=a[i]; while(x>0) { if (x%2==1) m2[i]++; x/=2; } x=a[i]; while(x>0) { if (x%3==1) m3[i]++; x/=3; } } int ans=0; forr(i,0,n) { ans+=dfs(i,(1<<i)); } cout<<ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...