求hack!
查看原帖
求hack!
578004
02Ljh楼主2022/11/18 21:01

35pts

#include <bits/stdc++.h>
using namespace std;
#define WA puts("\nwa there\n");
struct l
{
    bool kd=false,visit=false;
    int x,y;
} mapp[119][119];
struct packpack
{
    int sp;
    int zhu,fu;
} pb;
vector <int> p_wz;
vector <int> p_sl;
//vector <int> p_ti;
int spa[19]={0};
int kind[19]={1,4,4,3,2,4,3,3,5,5};
//1=空手 2=栓动步枪 3=射手步枪 4=突击步枪 5=霰弹枪
int need[19]={0,14,14,14,14,15,15,15,16,16};
int n,m,t,z_zd,f_zd;
int dx,dy;
void ts_pr()
{
    cout<<"\n主武器:"<<pb.zhu<<" 子弹数:"<<z_zd<<"\n 副武器:"<<pb.fu<<" 子弹数:"<<f_zd;
    cout<<"\n背包空间:"<<pb.sp<<" 拾取容量:"<<p_wz.size()<<endl;
    cout<<"背包储存 wz:";
    for(int i=0;i<p_wz.size();i++)
    {
        cout<<p_wz[i]<<" ";
    }
    cout<<"\n背包含量 sl:";
    for(int i=0;i<p_sl.size();i++)
    {
        cout<<p_sl[i]<<" ";
    }
    cout<<"\n";
    return ;
}
bool gun(int n)
{
    if(n<10) return true;
    else return false;
}
/*bool tzw(int n)
{
    if(n>9&&n<14) return true;
    if(n>9&&n<14) return true;
    else return false;
}*/
void zd()
{
    z_zd=f_zd=0;
    int z_z=need[pb.zhu],f_z=need[pb.fu];
    for(int i=0;i<p_wz.size();i++)
    {
        if(p_wz[i]==z_z) z_zd+=p_sl[i];
        if(p_wz[i]==f_z) f_zd+=p_sl[i];
    }
    return ;
}
void deal(int i)
{
    dx=floor((i-1)/(n+0.0))+1;
    dy=(i-1)%n+1;
    return ;
}
void sq(int xx,int yy)
{
    mapp[xx][yy].visit=true;
    if(gun(mapp[xx][yy].x))
    {
        if(kind[mapp[xx][yy].x]>kind[pb.zhu])
        {
            pb.zhu=mapp[xx][yy].x;
            //zd();
        }
        else if(kind[mapp[xx][yy].x]>kind[pb.fu]&&kind[mapp[xx][yy].x]<kind[pb.zhu])
        {
            pb.fu=mapp[xx][yy].x;
            //zd();
        }
        return ;
    }
    else
    {
        int chu=spa[mapp[xx][yy].x]*mapp[xx][yy].y;
        bool fla=true;
        int z_z=need[pb.zhu],f_z=need[pb.fu];
        while(pb.sp<chu)
        {
            bool use_=false;
            //fla=true;
            //ts_pr();
            for(int i=0;i<p_wz.size()&&!p_wz.empty();i++)
            {
                //ts_pr();
                //WA;
                //cout<<i<<"\n";
                if(p_wz[i]!=z_z&&p_wz[i]!=f_z)
                {
                    use_=true;
                    //WA;
                    while(p_sl[i]>0&&pb.sp<chu)
                    {
                        p_sl[i]--;
                        pb.sp+=spa[p_wz[i]];
                    }
                    if(p_sl[i]<=0)
                    {
                        p_sl.erase(p_sl.begin()+i);
                        p_wz.erase(p_wz.begin()+i);
                        //i--;
                    }
                    else if(pb.sp>=chu) fla=false;
                    //break;
                }
            }
            if(!use_) break;
            if(!fla) break;
        }

        //WA;
        if(fla&&pb.sp<chu)
        {
            //int io=p;
            while(pb.sp<chu&&!p_wz.empty())
            {
                //io++;
                //while(p_sl[io]>0&&pb.sp<chu)
                while(p_sl.back()>0&&pb.sp<chu)
                {
                    p_sl.back()--;
                    pb.sp+=spa[p_wz.back()];
                }
                //if(tzw(p_wz[io])) continue;
                //pb.sp+=spa[p_wz[io]]*p_sl[io];
                if(p_sl.back()<=0)
                {
                    p_sl.pop_back();
                    p_wz.pop_back();
                }
                //p_ti.erase(p_ti.begin()+io);
            }
        }
        int space_=mapp[xx][yy].y;
        for(int i=0;i<p_wz.size();i++)
        {
            if(p_wz[i]==mapp[xx][yy].x)
            {
                //space_+=(spa[p_wz[i]]*p_sl[i]);
                space_+=p_sl[i];
                p_wz.erase(p_wz.begin()+i);
                p_sl.erase(p_sl.begin()+i);
                i--;
                //break;
            }
        }
        p_wz.push_back(mapp[xx][yy].x);
        p_sl.push_back(space_);
        pb.sp-=chu;
        return ;
    }
    return ;
}
bool war(int xx,int yy)
{
    zd();
    int z_z=need[pb.zhu],f_z=need[pb.fu];
    int xxx=mapp[xx][yy].x;
    int yyy=mapp[xx][yy].y;
    mapp[xx][yy].visit=true;
    if(z_zd>=xxx)
    {
        z_zd-=xxx;
        for(int i=0;i<p_wz.size();i++)
        {
            if(p_wz[i]==z_z)
            {
                p_sl[i]-=xxx;
                break;
            }
        }
        pb.sp+=xxx*spa[need[pb.zhu]];
        return true;
    }
    if(f_zd>=yyy)
    {
        f_zd-=yyy;
        for(int i=0;i<p_wz.size();i++)
        {
            if(p_wz[i]==f_z)
            {
                p_sl[i]-=yyy;
                break;
            }
        }
        pb.sp+=yyy*spa[need[pb.fu]];
        return true;
    }
    return false;
}
void pr()
{
    cout<<pb.zhu<<endl<<pb.fu<<endl;
    for(int i=0;i<p_wz.size();i++)
    {
        cout<<p_wz[i]<<" "<<p_sl[i]<<endl;
    }
    return ;
}
int main()
{
    //freopen("P8199_4.in","r",stdin);
    //WA;
    int op,xx;
    spa[10]=50;spa[11]=40;spa[12]=30;spa[13]=20;
    spa[14]=2;spa[15]=1;spa[16]=5;
	cin>>n>>m>>pb.sp>>t;
	pb.sp*=10;
	pb.zhu=pb.fu=0;
	for(int i=1;i<=n*m;i++)
    {
        deal(i);
        cin>>xx;
        if(xx==17)
        {
            mapp[dx][dy].kd=true;
            cin>>mapp[dx][dy].x>>mapp[dx][dy].y;
        }
        else
        {
            mapp[dx][dy].x=xx;
            cin>>mapp[dx][dy].y;
        }
        //cout<<dx<<" "<<dy<<" "; puts("\n");
    }
    //WA;
    int px=1,py=1;
    bool fla_=true;
    if(mapp[px][py].kd)
    {
        if(!war(px,py))
        {
            fla_=false;
            //cout<<"\n YOU DIED \n";
            //return 0;
        }
    }
    else sq(px,py);
    mapp[1][1].visit=true;
    //WA;
    for(int i=0;i<t;i++)
    {
        cin>>op;
        //cout<<i<<"\n";
        if(!fla_) continue;
        //ts_pr();
        if(op==1) px--;
        if(op==2) px++;
        if(op==3) py--;
        if(op==4) py++;
        //cout<<"mapp["<<px<<"]["<<py<<"]="<<mapp[px][py].x<<endl;
        if(mapp[px][py].visit) continue;
        if(mapp[px][py].kd)
        {
            //WA;
            if(!war(px,py))
            {
                //ts_pr();
                fla_=false;
                break;
                //cout<<"\n YOU DIED \n";
                //return 0;
            }
        }
        else sq(px,py);
        //ts_pr();
    }
    if(!fla_) cout<<px<<" "<<py;
    else pr();
    return 0;
}

2022/11/18 21:01
加载中...