hdu 4536 XCOM Enemy Unknown

系统 2179 0

http://acm.hdu.edu.cn/showproblem.php?pid=4536

细节很重要呀 一个小的地方错了  检查了N久呀  鄙视自己

代码:

      #include<iostream>

#include<cstdio>

#include<cstring>

#include<string>

#include<map>

#include<set>

#include<vector>

#include<stack>

#include<queue>



using namespace std;

const int MOD=1000000007;

const int N=105;

const int M=5000005;

struct node

{

    char dread[20];

    char M;

}q[M];

int f[20];

int k1[N],k2[N],k3[N];

int ans,cnt;

int n,m,k;

int qt[M],L,R;

int bfs(char *dread)

{

    for(int i=0;i<n;++i)

    q[cnt].dread[i]=dread[i];

    q[cnt].M=0;

    L=R=0;

    qt[R++]=cnt++;

    int l=0,W;

    while(L<R)

    {

        int x=qt[L++];

        l=q[x].M;

        if(l==k) return l;

        if(cnt>=M) continue;

        W=1;

        q[cnt].M=q[x].M+1;

        for(int i=0;i<n;++i)

        {

            if(i==k1[l+1])

            q[cnt].dread[i]=max(q[x].dread[i]-2,1);

            else if(i==k2[l+1]||i==k3[l+1])

            q[cnt].dread[i]=q[x].dread[i]+2;

            else if(f[i]==f[k2[l+1]]||f[i]==f[k3[l+1]])

            q[cnt].dread[i]=q[x].dread[i]+1;

            else

            q[cnt].dread[i]=q[x].dread[i];

            if(q[cnt].dread[i]>W)

            W=q[cnt].dread[i];

            if(W>5) break;

        }

        if(W<=5)

        qt[R++]=cnt++;

        if(cnt>=M) continue;



        W=1;

        q[cnt].M=q[x].M+1;

        for(int i=0;i<n;++i)

        {

            if(i==k2[l+1])

            q[cnt].dread[i]=max(q[x].dread[i]-2,1);

            else if(i==k1[l+1]||i==k3[l+1])

            q[cnt].dread[i]=q[x].dread[i]+2;

            else if(f[i]==f[k1[l+1]]||f[i]==f[k3[l+1]])

            q[cnt].dread[i]=q[x].dread[i]+1;

            else

            q[cnt].dread[i]=q[x].dread[i];

            if(q[cnt].dread[i]>W)

            W=q[cnt].dread[i];

            if(W>5) break;

        }

        if(W<=5)

        qt[R++]=cnt++;

        if(cnt>=M) continue;



        W=1;

        q[cnt].M=l+1;

        for(int i=0;i<n;++i)

        {

            if(i==k3[l+1])

            q[cnt].dread[i]=max(q[x].dread[i]-2,1);

            else if(i==k2[l+1]||i==k1[l+1])

            q[cnt].dread[i]=q[x].dread[i]+2;

            else if(f[i]==f[k2[l+1]]||f[i]==f[k1[l+1]])

            q[cnt].dread[i]=q[x].dread[i]+1;

            else

            q[cnt].dread[i]=q[x].dread[i];

            if(q[cnt].dread[i]>W)

            W=q[cnt].dread[i];

            if(W>5) break;

        }

        if(W<=5)

        qt[R++]=cnt++;



    }

    return l;

}

int main()

{

    //freopen("data.in","r",stdin);

    int T;

    scanf("%d",&T);

    for(int w=1;w<=T;++w)

    {

        printf("Case #%d: ",w);

        char dread[20];

        scanf("%d %d %d",&n,&m,&k);

        for(int i=0;i<n;++i)

        scanf("%d",&f[i]);

        for(int i=0;i<n;++i)

        scanf("%d",&dread[i]);

        for(int i=1;i<=k;++i)

        scanf("%d %d %d",&k1[i],&k2[i],&k3[i]);

        ans=0;

        cnt=0;

        printf("%d\n",bfs(dread));

    }

    return 0;

}


    

hdu 4536 XCOM Enemy Unknown


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论