제출 #41132

#제출 시각아이디문제언어결과실행 시간메모리
41132wzy아름다운 순열 (IZhO12_beauty)C++14
0 / 100
3031 ms173088 KiB
#include <bits/stdc++.h> using namespace std; #define F first #define pb push_back #define S second #define pii pair<int,int> #define int long long int n; vector<int> v; vector<int> adj[30]; int dp[21][1LL<<20]; pair<int,int> f(int x){ int a1 = 0 , a2 = 0; int z =x; while(z > 0){ if(z%2 == 1) a1++; z/= 2; } z = x; while(z > 0){ if(z%3 == 1) a2++; z/=3; } return pair<int,int>(a1, a2); } int solve(int i , int mask){ if(dp[i][mask] != -1) return dp[i][mask]; int maxxi = 1<<n; maxxi--; if(mask == maxxi) return 1; dp[i][mask] = 0; for(int j = 0 ; j < adj[i].size() ; j++){ int v = adj[i][j]; if(mask & 1<<v) continue; dp[i][mask] += solve(v , 1<<v | mask); } return dp[i][mask]; } int32_t main(){ cin>>n; v.resize(n); for(int i = 0 ; i < n ;i++) cin>>v[i]; for(int i = 0 ; i <n; i++){ for(int j = i + 1 ; j < n;j++){ if(f(v[i]).F == f(v[j]).F || f(v[i]).S ==f(v[j]).S){ adj[i].pb(j); adj[j].pb(i); } } } memset(dp, - 1 , sizeof dp); int ans = 0; for(int i = 0 ; i < n ; i++){ ans+= solve(i , 1<<i); } cout<<ans<<endl; }

컴파일 시 표준 에러 (stderr) 메시지

beauty.cpp: In function 'long long int solve(long long int, long long int)':
beauty.cpp:34:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int j = 0 ; j < adj[i].size() ; j++){
                    ^
#Verdict Execution timeMemoryGrader output
Fetching results...