답안 #502135

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
502135 2022-01-05T10:51:35 Z khangal 아름다운 순열 (IZhO12_beauty) C++14
100 / 100
707 ms 209872 KB
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
typedef long long ll;
typedef double db;
typedef vector<long long> vl;
typedef pair<long long, long long > pl;
const int N = 1e6 + 1;
#define po pop_back
#define pb push_back
#define mk make_pair
#define lw lower_bound
#define up upper_bound
#define ff first
#define ss second
#define boost ios_base::sync_with_stdio(); cin.tie(0); cout.tie(0);
#define MOD 1000000007
#define MAX 1e18 
#define MIN -1e18
#define per(i,a,b) for(ll i=b;i>=a;i--)
#define con continue
#define freopen freopen("input.txt", "r", stdin);freopen("output.txt", "w", stdout);
#define PI 3.14159265358979323846264338327950288419716939937510582097494459230781640628
//typedef tree<ll , null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update> indexed_set;
template< typename T>
using indexed_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
ll n, m, ans, mid, mn, mx, cnt, sum, h1, h2, arr[3234567],arr1[1234567], sz, k, i, j, h, a, w, x, y, z,par[1234567];
bool used[1234567];
ll dx[4]={-1,1,0,0},dy[4]={0,0,-1,1},c1[123][123];
vector<ll> edge[1234567];
ll jump[22][223456];
ll lvl[1234567];
//ll bit[1234567];
//ll timer;
//ll st[1234567],endd[1234567];
//ll dp[5005][5005];
ll power(ll base, ll val, ll mod) {
    ll res = 1;
    while (val) {
        if (val % 2 == 1) {
            res = res * base;
        }
        base = base * base;
        base %= mod;
        res %= mod;
        val /= 2;
    }
    return res;
}
bool comp(pl x,pl y){
    if(x.ff>y.ff)return true;
    return false;
}
ll find(ll x){
    if(x==par[x])return x;
    else return par[x]=find(par[x]);
}
void process_LCA(){
    for(int i=1;(1<<i)<=n;i++){
        for(int j=1;j<=n;j++){
            jump[i][j] = jump[i-1][jump[i-1][j]];
        }
    }
}
ll LCA(ll x,ll y){
    if(lvl[x] < lvl[y])swap(x,y);
    ll diss = lvl[x] - lvl[y];
    for(int i=21;i>=0;i--){
        if((1<<i)&diss){
            x = jump[i][x];
        }
    }
    if(x==y)return x;
    for(int i=21;i>=0;i--){
        if(jump[i][x] != jump[i][y]){
            x = jump[i][x];
            y = jump[i][y];
        }
    }
    return jump[0][x];
}
ll dp[1<<21][22];
class A {
public:
    static void funcA() {
        cin>>n;
        ll cnt1[123],cnt2[123];
        for(int i=0;i<n;i++){
            cin>>arr[i];
            dp[(1<<i)][i]=1;
            cnt1[i]=__builtin_popcount(arr[i]);
            x=arr[i];
            while(x){
                if(x%3==1)cnt2[i]++;
                x/=3;
            }
        }
        for(int i=0;i<(1<<n);i++){
            for(int j=0;j<n;j++){
                for(int k=0;k<n;k++){
                    if(!((1<<j)&i) && (cnt1[j]==cnt1[k] || cnt2[j]==cnt2[k])){
                        dp[(1<<j)|i][j] += dp[i][k];
                    }
                }
            }
        }
        for(int i=0;i<n;i++)ans+=dp[(1<<n)-1][i];
        cout<<ans;
    }
}lol;
void solve() {
    A::funcA();
}
int main() {
    ll T = 1;
    //cin>>T;
    boost;
    while (T--) {
        solve();
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 29260 KB Output is correct
2 Correct 14 ms 29268 KB Output is correct
3 Correct 14 ms 29292 KB Output is correct
4 Correct 15 ms 29316 KB Output is correct
5 Correct 15 ms 29260 KB Output is correct
6 Correct 14 ms 29448 KB Output is correct
7 Correct 14 ms 29452 KB Output is correct
8 Correct 14 ms 29388 KB Output is correct
9 Correct 15 ms 29404 KB Output is correct
10 Correct 15 ms 29488 KB Output is correct
11 Correct 22 ms 32076 KB Output is correct
12 Correct 19 ms 32132 KB Output is correct
13 Correct 42 ms 40576 KB Output is correct
14 Correct 146 ms 74432 KB Output is correct
15 Correct 144 ms 74400 KB Output is correct
16 Correct 158 ms 74344 KB Output is correct
17 Correct 162 ms 74504 KB Output is correct
18 Correct 146 ms 74340 KB Output is correct
19 Correct 697 ms 209872 KB Output is correct
20 Correct 707 ms 209772 KB Output is correct