hdu4727搜索+stl。轻微剪枝

真心险啊。。最后3分钟a出来了。。回家再重新提交的时候发现出现re的错误。。换成g++错误消除。。so。。用stl的情况下最好是用g++。。否则你死都不知道是怎么死的。。还好人品。。最后提交的时候是g++。。不然啃爹的罚时类。。还有就是stl中间的vector容器的使用。。这里的题目跟网络赛的还有点不同。。数据大了1。。- -||

#include<iostream>

#include<vector>

using namespace std;



const int maxn=1020;

vector<int>num;

//int num[maxn];//

int t;

int no[maxn];//

int times[maxn];//

int done=0;//

int locate(int number)

{

    int i=0;

    for(i=0;i<=t-1;i++)

    {

        if(no[i]==-1)

        {

            no[i]=number;

            return i;

        }

        if(no[i]==number)

        {

            return i;

        }

    }

}

bool dfs()

{

    //cout<<done<<endl;

    int t_d;

    t_d=t-done;

    int i;

    if(done==t)

    {

        return 1;

    }

    int tmp=t_d-5;

    for(i=t_d-2;i>=t_d-8;i--)

    {

        if(i<0)

        {

            break;

        }

        if(num[i]==num[t_d-1])

        {

            int save=num[i];

            num.erase(num.begin()+(t_d-1));

            num.erase(num.begin()+i);

            

            t_d-=2;

            done=done+2;

            if(dfs())

            {

                return 1;

            }else

            {

                num.insert(num.begin()+(t_d-1),save);

                num.insert(num.begin()+i,save);

                

                done=done-2;

            }

        }

    }

    return 0;

}

int main()

{



/*

    int t;

    while(cin>>t)

    {

        vector<int>v;//

        v.clear();

        int i=0;

        int tt=t;

        for(i=0;i<=t-1;i++)

        {

            int num;//

            cin>>num;

            v.push_back(num);

        }

        bool tag;

        do

        {

            while(v[t-1]==-1&&t-1>=0)

            {

                t--;

            }

            int tmp=t-5;

            for(i=t-2;i>=tmp;i--)

            {

                if(i<0)

                {

                    tag=0;

                    break;

                }

                if(v[i]==-1)

                {

                    tmp--;

                    continue;

                }

                if(v[t-1]==v[i])

                {

                    v[t-1]=-1;

                    v[i]=-1;

                    tag=1;

                    break;

                }

                tag=0;

            }

        }while(tag);

        bool no=0;

        for(i=0;i<=tt-1;i++)

        {

            if(v[i]!=-1)

            {

                no=1;

                break;

            }

        }

        if(no)

        {

            cout<<0<<endl;

        }else

        {

            cout<<1<<endl;

        }

    }

    */

    while(cin>>t)

    {

        memset(no,-1,sizeof(no));

        memset(times,0,sizeof(times));

        num.clear();

        done=0;

        int i=0;

        int tt=t;

        

        for(i=0;i<=t-1;i++)

        {

            int nnn;

            cin>>nnn;

            num.push_back(nnn);

            times[locate(num[i])]++;

        }/*

        bool isno=0;

        for(i=0;i<=t-1;i++)

        {

            //cout<<times[i]<<endl;

            if(times[i]%2)

            {

                isno=1;

                //break;

            }

        }

        if(isno)

        {

            cout<<0<<endl;

        }else*/

        {

            if(dfs())

            {

                cout<<1<<endl;

            }else

            {

                cout<<0<<endl;

            }

        }

    }

    return  0;

}

  

你可能感兴趣的:(HDU)