Pesca Bizzarra 5/100


#1

Buongiorno, sto provando a risolvere Pesca Bizzarra, ma il programma dà giusto solo il caso di esempio. L’idea che uso è la stessa descritta in (Pesca bizzarra), ma la mia implementazione, che allego sotto, utilizza delle priority_queue invece di sortare gli array. Qualcuno riesce ad aiutarmi? Grazie

int p,pi,pj,ai,aj;
pair<int,int> qp[1000010];
vector<int> bs;
vector<int> bd;
priority_queue<pair<int,int> > qx;
priority_queue<pair<int,int> > qy;

int main(){
    cin>>p;
    int tot=p;
    cin>>pi>>pj;
    for(int i=0;i<p;i++){
        cin>>qp[i].first>>qp[i].second;
    }
    
    int x=pi,y=pj;
    
    for(int i=0;i<2;i++){
        string t; cin>>t;
        
        bool f=1;
        if(t[0]=='-')f=0;
        while(t!="0"){
           
            if(f){
                if(t[0]=='+')bs.push_back(t[1]-48);
                else bs.push_back(-(t[1]-48));
            }
            else{
                if(t[0]=='+')bd.push_back(t[1]-48);
                else bd.push_back(-(t[1]-48));
            }
            
            if(t[0]=='+')y+=t[1]-48;
            else x+=t[1]-48;
            
            cin>>t;
        }
        if(i==0){
            ai=x; aj=y;
        }
        
        
    }
    
  
    for(int i=0;i<p;i++){
        if(qp[i].first<pi||qp[i].first>ai||qp[i].second<pj||qp[i].second>aj)tot--;
        else{
            qx.push(make_pair(-qp[i].first,qp[i].second));
            qy.push(make_pair(-qp[i].second,qp[i].first));
        }
    }
    
    x=pi; y=pj;
    for(int i=0;i<bs.size();i++){
        
        if(bs[i]>0)y+=bs[i];
        else{
            x+=-bs[i];
            while(!qx.empty()&&-qx.top().first<x){
 
                if(qx.top().second>y)tot--;
                qx.pop();
            }
        } 
    }
    cout<<"esce ciclo"<<endl;
    x=pi; y=pj;
    for(int i=0;i<bd.size();i++){
        if(bd[i]>0){
            y+=bd[i];
            while(!qy.empty()&&-qy.top().first<y){
                if(qy.top().second>x)tot--;
                qy.pop();
            }
        }
        else{
            x+=-bd[i];
        } 
    }
    cout<<tot;
    
    
}

#2

Risolto. Il problema era nell’input.