大佬救救,就过了2个点,全RE了
查看原帖
大佬救救,就过了2个点,全RE了
1453256
yucplusplus楼主2024/10/14 23:40
#include <iostream>
#include <cstdio>
#include <stack>
#include <cstring>
#include <cmath>

using namespace std;
struct node{
    int num;
    char ysf;
};
string str;
node tree[100050];
int i,p=1;
int Num(){
    i++;
    int ans=0;
    stack<int> s;
    while(int(str[i])>=48&&int(str[i])<=57){
        int h=int(str[i])-48;
        s.push(h);
        i++;
    }
    int n=s.size();
    for(int j=0;j<n;j++){
        ans+=s.top()*pow(10,j);
        s.pop();
    }
    return ans;
}
// int qgen(int p){
//     if (p==1) return p;
//     if(!p%2) {
//         return ++p;
        
//     }
//     else{
//         p=p/2;
//         //cout<<p;
//         p=qgen(p);
//     }
//     return -1;
// }
int qgen(int p) {  
    while (p % 2 != 0) {  
        p = p / 2;  
    }    
    return p + 1;  
}
int main(){	
	long m,q;

	cin>>m>>q>>str;
	int n=str.size();
    for(i=0;i<n;){
        if(str[i]=='x') {
            tree[p].ysf=str[++i];
            tree[p].num=Num();
            //cout<<tree[p].num;
        }
        if(str[i]=='?') {
            p*=2;
            // cout<<p<<'?'<<'\n';
            i++;
        }
        if(str[i]==':'){
            
            p=qgen(p);
            // cout<<p<<':'<<'\n';
            i++;
        }
        if(int(str[i])>=48&&int(str[i])<=57){
            tree[p].ysf='=';
            i--;
            tree[p].num=Num();
        }
        
    }
    // for(int j=0;j<m;j++){
    //     cout<<tree[j].num<<' '<<tree[j].ysf<<'\n';
    // }
    for(int i=0;i<q;i++){
        int T;
        cin>>T;
        int j=1;
        while(tree[j].ysf!='='){
            if(tree[j].ysf=='>'){
                if(tree[j].num<T) j*=2;
                else j=j*2+1;
            }
            if(tree[j].ysf=='<'){
                if(tree[j].num>T) j*=2;
                else j=j*2+1;
            }
        }
        cout<<tree[j].num<<'\n';
    }
	return 0;
}

为什么会RE啊 明明开够大了 大佬们救救,呜呜呜

2024/10/14 23:40
加载中...