답안 #946280

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
946280 2024-03-14T13:18:06 Z Zena_Hossam 아름다운 순열 (IZhO12_beauty) C++14
0 / 100
375 ms 262144 KB
#include <bits/stdc++.h>
using namespace std;
#define fi ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//#define ll double
#define ll long long
//#define ll1 int
#define F first
#define S second
#define sz size()
#define all(s) s.begin(),s.end()
#define all1(s) s.rbegin(),s.rend()
ll c=0,n;vector<vector<ll>>s;
ll m[(1<<20)+5][25],vis[(1<<20)+5][25];
ll solve(ll uu,ll k,ll o){
    ll u=uu;u=(u|(1<<k));
    if(vis[uu][k])return m[uu][k];vis[uu][k]=1;
    //cout<<k<<" ";
if(__builtin_popcount(u)==n){
   return m[uu][k]=1;

}ll x=0;
for(ll i=0;i<s[k].sz;i++){

    if((u&(1<<(s[k][i]))))continue;
    x+=solve(u,s[k][i],o+1);
}return m[uu][k]=x;
}
int main()
{
    //freopen("stdin.in","r",stdin);freopen("stdout.out","w",stdout);
    ll T=1;fi
    //cin>>T;ll oo=0;
    while(T--)
    {
       cin>>n;
       ll arr[n];s.resize(n+5);
       for(ll i=0;i<n;i++){
        cin>>arr[i];
       }ll m[n+5]={};ll d[n+5]={};
       for(ll i=0;i<n;i++){
            ll a=arr[i];ll p=0;
            while(a!=0){
                if(a%2==1)p++;
                a/=2;
            }
            m[i]=p;
            ll b=arr[i];ll pp=0;
            while(b!=0){
                if(b%3==1)pp++;
                b/=3;
            }
            d[i]=pp;
       }
       for(ll i=0;i<n;i++){
        for(ll j=i+1;j<n;j++){if(i==j)continue;
            if(m[i]==m[j]){s[i].push_back(j);//cout<<i<<" "<<j<<"k\n";
            s[j].push_back(i);}
            else if(d[i]==d[j]){s[i].push_back(j);//cout<<i<<" "<<j<<"k\n";
            s[j].push_back(i); }
        }
       }ll c=0;
       for(ll i=0;i<n;i++){
       c+=solve(0,i,0);//cout<<"\n";
       }cout<<c;
    }
}

Compilation message

beauty.cpp: In function 'long long int solve(long long int, long long int, long long int)':
beauty.cpp:16:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   16 |     if(vis[uu][k])return m[uu][k];vis[uu][k]=1;
      |     ^~
beauty.cpp:16:35: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
   16 |     if(vis[uu][k])return m[uu][k];vis[uu][k]=1;
      |                                   ^~~
beauty.cpp:22:13: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 | for(ll i=0;i<s[k].sz;i++){
      |             ^
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 2396 KB Output is correct
2 Correct 0 ms 2396 KB Output is correct
3 Correct 0 ms 2396 KB Output is correct
4 Correct 1 ms 2392 KB Output is correct
5 Correct 1 ms 2392 KB Output is correct
6 Correct 1 ms 4700 KB Output is correct
7 Correct 1 ms 4700 KB Output is correct
8 Correct 1 ms 4700 KB Output is correct
9 Correct 1 ms 4696 KB Output is correct
10 Correct 1 ms 4608 KB Output is correct
11 Correct 10 ms 9564 KB Output is correct
12 Correct 8 ms 9820 KB Output is correct
13 Correct 67 ms 29588 KB Output is correct
14 Correct 322 ms 104940 KB Output is correct
15 Correct 375 ms 105096 KB Output is correct
16 Correct 247 ms 105096 KB Output is correct
17 Correct 315 ms 105092 KB Output is correct
18 Correct 225 ms 105488 KB Output is correct
19 Runtime error 59 ms 262144 KB Execution killed with signal 9
20 Halted 0 ms 0 KB -