这种方法是注定会RE吗
查看原帖
这种方法是注定会RE吗
555065
ChrysanthBlossom楼主2022/4/10 16:43

空间开到inf了,照样RE 代码如下:

#include<iostream>
#include<string>
#define maxn 0xffffff
using namespace std;
int tree[maxn],maxi[maxn][2],mini[maxn][2];
void build(int i){
    char c;
    cin>>c;
    int n=c-'0';
    tree[i]=n;
    if(n>0)build(i<<1);//问题在这里,我怎么用i<<1而不是++i过
    if(n>1)build(i<<1|1);
}
void dfs(int i){
    if(!tree[i]){
        maxi[i][0]=mini[i][0]=0;
        maxi[i][1]=mini[i][1]=1;
        return;
    }
    dfs(i<<1);
    if(tree[i]>1)dfs(i<<1|1);
    maxi[i][1]=maxi[i<<1][0]+maxi[i<<1|1][0]+1;
    maxi[i][0]=max(maxi[i<<1][0]+maxi[i<<1|1][1],maxi[i<<1][1]+maxi[i<<1|1][0]);
    mini[i][1]=mini[i<<1][0]+mini[i<<1|1][0]+1;
    mini[i][0]=min(mini[i<<1][0]+mini[i<<1|1][1],mini[i<<1][1]+mini[i<<1|1][0]);
}
int main(){
    build(1);
    dfs(1);
    cout<<max(maxi[1][0],maxi[1][1])<<' '<<min(mini[1][0],mini[1][1]);
    return 0;
}

当然我知道怎么能过,我就是想问一下怎么样这种方法才能过

2022/4/10 16:43
加载中...