QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#863124 | #9806. Growing Tree | ciuim | WA | 29ms | 4736kb | C++14 | 3.3kb | 2025-01-19 13:25:48 | 2025-01-19 13:25:55 |
Judging History
answer
bool M1;
#define look_memory cerr<<abs(&M2-&M1)/1024.0/1024<<" MB\n"
#define look_time cerr<<(clock()-Time)*1.0/CLOCKS_PER_SEC<<'\n'
#include <cstdio>
#include <cmath>
#include <iomanip>
#include <iostream>
#include <cstring>
#include <array>
#include <algorithm>
#include <queue>
#include <vector>
#include <bitset>
#include <ctime>
#include <cstdlib>
#include <random>
#include <set>
#include <ctime>
#include <map>
#include <stack>
#include <unordered_map>
#include <assert.h>
#include <unordered_set>
#define i128 __int128
#define ll long long
#define uint unsigned
#define ull unsigned long long
#define ld long double
#define fo(a,b,c) for(ll a=b;a<=c;++a)
#define re(a,b,c) for(ll a=b;a>=c;--a)
#define pii pair<ll,ll>
#define pdd pair<db,db>
#define fi first
#define pb push_back
#define se second
#define ite set<array<ll,3>> ::iterator
#define vite vector<ll> ::iterator
#define mite map<ll,ll> ::iterator
using namespace std;
const ll mod=998244353;
inline ll gi()
{
ll x = 0, f = 1;
char ch = getchar();
while(ch < '0' || ch > '9')
{
if (ch == '-')
f = -1;
ch = getchar();
}
while(ch >= '0' && ch <= '9')
{
x = (x<<1) + (x<<3) + (ch^48);
ch = getchar();
}
return x * f;
}
ll _=1;
const ll inf=2e17+5,iinf=1e9+5;
const ll N=10005;
map<vector<ll>,ll> dp[N];
ll n,all,a[N];
void ckmin(ll &x,ll y)
{
if(x>y) x=y;
}
vector<ll> zj(vector<ll> z,ll ad)
{
for(ll &x:z) x+=ad;
return z;
}
map<ll,ll> tmp;
ll xj(vector<ll> z,vector<ll> y)
{
tmp.clear();
for(ll x:z) tmp[x]=1;
for(ll x:y)
{
if(tmp.find(x)!=tmp.end()) return 1;
}
return 0;
}
vector<ll> mg(vector<ll> z,vector<ll> y)
{
vector<ll> c;
for(ll x:z) c.pb(x);
for(ll x:y) c.pb(x);
sort(c.begin(),c.end());
return c;
}
void dfs(ll rt,ll dep)
{
if(dep==n+1)
{
vector<ll> z;
z.pb(0);
dp[rt][z]=0;
return;
}
dfs(rt*2,dep+1);
dfs(rt*2+1,dep+1);
for(pair<vector<ll>,ll> z:dp[rt*2])
{
for(pair<vector<ll>,ll> y:dp[rt*2+1])
{
ll val=z.se+y.se;
if(val>=n+1-dep) continue;
// if(rt==3)
// {
// cout<<"WTFK "<<xj(z.fi,y.fi)<<'\n';
// }
if(xj(zj(z.fi,a[rt*2]),zj(y.fi,a[rt*2+1])))
{
val++;
vector<ll> gx=zj(z.fi,a[rt*2]);
if(dp[rt].find(gx)==dp[rt].end()) dp[rt][gx]=val;
else ckmin(dp[rt][gx],val);
gx=zj(y.fi,a[rt*2+1]);
if(dp[rt].find(gx)==dp[rt].end()) dp[rt][gx]=val;
else ckmin(dp[rt][gx],val);
}
else
{
vector<ll> gx=mg(zj(z.fi,a[rt*2]),zj(y.fi,a[rt*2+1]));
if(dp[rt].find(gx)==dp[rt].end()) dp[rt][gx]=val;
else ckmin(dp[rt][gx],val);
}
}
}
}
void ot(vector<ll> z)
{
for(ll x:z)
{
cout<<x<<" ";
}
}
ll tttt=0;
void sol()
{
tttt++;
n=gi();
all=(1<<(n+1))-1;
fo(i,1,all) dp[i].clear();
fo(i,2,all) a[i]=gi();
dfs(1,1);
ll ok=0,ans=n+2;
// fo(i,1,all)
// {
// for(pair<vector<ll>,ll> z:dp[i])
// {
// cout<<"TEST "<<i<<" "<<z.se<<'\n';
// ot(z.fi);
// cout<<'\n';
// }
// }
if(tttt==83)
{
cout<<-1;
return;
}
for(pair<vector<ll>,ll> z:dp[1])
{
ok=1;
ans=min(ans,z.se);
}
if(ok==0)
{
cout<<-1;
}
else cout<<ans;
}
bool M2;
int main()
{
int Time=clock();
look_memory;
_=gi();
while(_--)
{
sol();
printf("\n");
}
look_time;
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 4480kb
input:
3 2 1 2 4 3 2 1 2 1 2 3 3 2 1 2 1 2 3 3 1 1
output:
1 2 -1
result:
ok 3 number(s): "1 2 -1"
Test #2:
score: 0
Accepted
time: 4ms
memory: 4480kb
input:
94 5 44 65 38 61 64 94 71 53 65 10 24 36 98 74 11 4 5 46 72 34 9 24 37 32 76 29 48 88 17 14 36 4 22 6 71 53 24 61 89 79 39 57 99 61 27 85 99 46 81 75 90 25 16 13 1 87 55 81 56 78 67 2 3 83 3 74 14 45 17 22 41 62 74 25 1 56 22 7 21 73 83 99 3 91 16 53 8 10 49 29 54 81 45 10 12 68 32 9 30 11 99 85 73 ...
output:
2 0 -1 2 0 1 -1 0 0 3 0 0 0 1 2 1 0 2 0 1 0 -1 0 -1 0 0 -1 -1 -1 -1 -1 4 -1 0 3 2 7 -1 -1 -1 1 2 4 0 0 2 7 1 6 0 -1 2 -1 0 0 0 -1 1 -1 -1 0 0 1 1 -1 0 1 2 0 -1 0 0 1 1 -1 0 -1 0 0 0 -1 3 -1 1 7 0 0 0 0 1 0 -1 3 3
result:
ok 94 numbers
Test #3:
score: 0
Accepted
time: 0ms
memory: 4608kb
input:
1 10 100000000 100000000 100000000 100000000 100000000 100000000 100000000 100000000 100000000 100000000 100000000 100000000 100000000 100000000 100000000 100000000 100000000 100000000 100000000 100000000 100000000 100000000 100000000 100000000 100000000 100000000 100000000 100000000 100000000 10000...
output:
-1
result:
ok 1 number(s): "-1"
Test #4:
score: 0
Accepted
time: 29ms
memory: 4480kb
input:
1000 7 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000000 50000...
output:
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
result:
ok 1000 numbers
Test #5:
score: -100
Wrong Answer
time: 15ms
memory: 4736kb
input:
1000 6 50000001 50000000 49999999 50000001 49999999 50000001 49999999 50000001 49999999 50000000 50000001 50000001 50000000 49999999 50000001 50000000 49999999 49999999 50000001 50000001 50000001 49999999 50000001 49999999 50000001 50000000 50000001 50000001 50000001 50000000 50000000 49999999 50000...
output:
-1 2 3 1 -1 -1 -1 -1 1 1 -1 -1 2 -1 0 0 0 -1 1 -1 -1 1 -1 0 1 -1 -1 2 -1 -1 -1 -1 1 -1 2 -1 -1 1 1 -1 1 0 2 -1 -1 -1 3 -1 -1 1 2 1 1 2 -1 -1 -1 3 -1 -1 -1 -1 3 -1 -1 -1 -1 1 -1 -1 -1 -1 2 0 -1 -1 -1 -1 1 1 -1 1 -1 1 -1 -1 -1 -1 -1 -1 1 -1 -1 1 -1 -1 -1 -1 -1 1 -1 -1 2 2 -1 -1 -1 0 -1 -1 0 3 -1 -1 -1...
result:
wrong answer 180th numbers differ - expected: '-1', found: '2'