40分求助

P4715 【深基16.例1】淘汰赛

因为树不太会,数据也不大,所以干脆稳打暴力。~~本来想写链表的~~ 答题思路就是一列数,然后两两比较,每次都筛除一半的队伍,最后决赛输出被打败的(亚军)
by S_ALPHA @ 2023-11-10 17:15:15


我是他同学,看他两天没调出来,用树做了一个,用他的思路做了一个 附代码如下: 他的神奇小思路(模拟): ```cpp #include<bits/stdc++.h> using namespace std; int n; int a[10000]; int p,kk,tt; int main(){ cin>>n; for(int i=1;i<=pow(2,n);i++){ cin>>a[i]; } for(int i=1;i<=n-1;i++){ p=1; for(int j=1;j<=pow(2,n);j++){ if(p==1&&a[j]!=0){ kk=a[j]; tt=j; p=0; } else if(p==0&&a[j]!=0){ if(a[j]>kk){ a[tt]=0; } else{ a[j]=0; } p++; } } } p=0; for(int i=1;i<=pow(2,n);i++){ if(a[i]!=0&&p==0){ kk=a[i]; tt=i; p=1; } else if(a[i]!=0&&p==1){ if(a[i]>kk){ cout<<tt; } else{ cout<<i; } } } return 0; } ``` ----------------------------- ----------------------------- 树(做的不太好,输出有bug,但是数据很水,所以AC了) ```cpp #include<bits/stdc++.h> using namespace std; const int N=1024; int n; int f[N],a[N]; int solve(int n){ if(f[n]>0){ return f[n]; } f[n]=max(solve(2*n),solve(2*n+1)); return f[n]; } int main(){ cin>>n; int kk=pow(2,n); for(int i=0;i<kk;i++){ cin>>f[kk+i]; a[i+1]=f[kk+i]; } solve(1); int mm=min(f[2],f[3]); for(int i=1;i<=kk;i++){ if(a[i]==mm){ cout<<i; return 0; } } return 0; } ``` ----------------------------- ----------------------------- 我跟他说了,他不听,那希望各位大佬来帮帮他了:D
by queenbee @ 2023-11-10 17:31:17


其实是在11行上面加一条 ```cpp if(!lb[i].pw)continue; ``` 因为如果没有continue,flag就会一直更新,导致指向的位置错误,然后就“筛”不动了。 自此结帖
by S_ALPHA @ 2023-11-22 17:22:20


|