QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#373553 | #5200. BinCoin | InfinityNS# | RE | 1ms | 3824kb | C++14 | 3.2kb | 2024-04-01 20:13:06 | 2024-04-01 20:13:07 |
Judging History
answer
#include<bits/stdc++.h>
#define f first
#define s second
#define pb push_back
#define sz(x) (int)(x).size()
#define all(x) x.begin(),x.end()
using namespace std;
const int N=1001;
vector<int> parent(N);
vector<pair<int,int>> pos(N);
vector<bool> ok(N);
void solve(vector<vector<int>> tr,int par){
if(sz(tr[0])==1){
parent[tr[0][0]]=par;
return;
}
for(int i=0;i<sz(tr[0]);i++){
pos[tr[0][i]]={-1,-1};
ok[tr[0][i]]=1;
}
for(int i=0;i<sz(tr);i++){
for(int j=0;j<sz(tr[i]);j++){
int p=j;
int val=tr[i][j];
if(pos[val].f==-1||pos[val].f==p){
pos[val].f=p;
}
else{
if(pos[val].s==-1||pos[val].s==p){
pos[val].s=p;
}
else{
ok[val]=0;
}
}
}
}
vector<int> cand;
int roott=-1,poss=0;
for(int i=0;i<sz(tr[0]);i++){
int t=tr[0][i];
//printf("%i: %i %i %i\n",t,ok[t]?1:0,pos[t].f,pos[t].s);
if(ok[t]){
if(pos[t].s==-1)pos[t].s=pos[t].f;
if(roott==-1){
roott=t;
poss=min(pos[t].f,pos[t].s);
}
else{
if(min(pos[t].f,pos[t].s)>poss){
poss=min(pos[t].f,pos[t].s);
roott=t;
}
}
}
}
cand.pb(roott);
for(auto root:cand){
//printf("%i!\n",root);
vector<vector<int>> lv,rv;
vector<int> nl,nr;
bool ok=1;
for(int j=0;j<sz(tr);j++){
vector<int> pre,posle;
bool nasao=0;
for(int i=0;i<sz(tr[j]);i++){
if(tr[j][i]==root){
nasao=1;
continue;
}
if(!nasao)pre.pb(tr[j][i]);
else posle.pb(tr[j][i]);
}
pair<vector<int>,vector<int>> tt={pre,posle};
sort(all(pre));
sort(all(posle));
if(pre>posle)swap(pre,posle),swap(tt.f,tt.s);
lv.pb(tt.f);
rv.pb(tt.s);
/*printf("pre: ");
for(int i=0;i<sz(pre);i++){
printf("%i ",pre[i]);
}
printf("posle: ");
for(int i=0;i<sz(posle);i++){
printf("%i ",posle[i]);
}
printf("\n");*/
if(j==0){
nl=pre;
nr=posle;
}
else{
if(nl!=pre||nr!=posle){
ok=0;
break;
}
}
}
//printf("%i\n",ok?1:0);
if(ok){
parent[root]=par;
solve(lv,root);
solve(rv,root);
break;
}
assert(0);
}
}
int main(){
int n,k;
scanf("%i %i",&n,&k);
vector<vector<int>> vals(k,vector<int>(n));
for(int i=0;i<k;i++){
for(int j=0;j<n;j++){
scanf("%i",&vals[i][j]);
}
}
solve(vals,-1);
for(int i=1;i<=n;i++){
printf("%i ",parent[i]);
}
printf("\n");
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 3824kb
input:
3 50 1 2 3 1 2 3 3 2 1 1 2 3 3 2 1 1 2 3 1 2 3 1 2 3 1 2 3 3 2 1 1 2 3 3 2 1 1 2 3 3 2 1 1 2 3 3 2 1 1 2 3 1 2 3 3 2 1 1 2 3 3 2 1 1 2 3 3 2 1 1 2 3 1 2 3 3 2 1 1 2 3 1 2 3 1 2 3 1 2 3 3 2 1 1 2 3 3 2 1 3 2 1 1 2 3 3 2 1 1 2 3 3 2 1 3 2 1 1 2 3 1 2 3 3 2 1 1 2 3 3 2 1 3 2 1 3 2 1 1 2 3 1 2 3 3 2 1 3...
output:
2 -1 2
result:
ok everything is fine
Test #2:
score: -100
Runtime Error
input:
5 60 2 4 3 5 1 1 5 2 4 3 1 5 2 4 3 1 5 2 4 3 1 5 3 4 2 1 5 3 4 2 1 5 3 4 2 1 5 3 4 2 1 5 3 4 2 3 4 2 5 1 2 4 3 5 1 1 5 2 4 3 3 4 2 5 1 2 4 3 5 1 2 4 3 5 1 1 5 2 4 3 3 4 2 5 1 3 4 2 5 1 1 5 2 4 3 2 4 3 5 1 1 5 2 4 3 1 5 3 4 2 3 4 2 5 1 1 5 3 4 2 1 5 2 4 3 1 5 3 4 2 1 5 2 4 3 2 4 3 5 1 2 4 3 5 1 2 4 3...