zoukankan      html  css  js  c++  java
  • 1474. About Frogs 夜

    http://acm.timus.ru/problem.aspx?space=1&num=1474

    找规律 然后模拟

    规律: 假设隔一个跳为 jump,相邻跳为 mov (mov  分为从左向右 movl_r 和从右向左 movr_l)

    jump 的优先级高于 mov

    对于 mov 当空格在 左面 movl_r 优先级高  当空格在 右面 movr_l 优先级高  当空格在中间 优先级任意 但要始终不变。

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<vector>
    #include<queue>
    #include<map>
    #include<stack>
    #include<algorithm>
    #include<cmath>
    
    using namespace std;
    //#pragma comment(linker,"/STACK:1000000000,1000000000")
    
    #define LL long long
    
    const int INF=0x3f3f3f3f;
    const int N=1005;
    const int M=1000000;
    int frogs[N];
    int space;
    int ans[M+5],num;
    int n;
    bool jump()
    {
        if(space-2>=0&&frogs[space-2]==-1&&frogs[space-1]==1)
        {swap(frogs[space-2],frogs[space]);ans[num++]=space=space-2;return true;}
        if(space+2<=2*n&&frogs[space+2]==1&&frogs[space+1]==-1)
        {swap(frogs[space+2],frogs[space]);ans[num++]=space=space+2;return true;}
        return false;
    }
    bool movr_l()
    {
        if(space+1<=2*n&&frogs[space+1]==1)
        {swap(frogs[space+1],frogs[space]);ans[num++]=space=space+1;return true;}
        return false;
    }
    bool movl_r()
    {
        if(space-1>=0&&frogs[space-1]==-1)
        {swap(frogs[space-1],frogs[space]);ans[num++]=space=space-1;return true;}
        return false;
    }
    bool mov()
    {
        if(space>=n)
        {
            if(movr_l())
            return true;
            if(movl_r())
            return true;
        }else
        {
            if(movl_r())
            return true;
            if(movr_l())
            return true;
        }
        return false;
    }
    bool action()
    {
        if(jump())
        return true;
        if(mov())
        return true;
        return false;
    }
    int main()
    {
        //freopen("data.txt","r",stdin);
        while(cin>>n)
        {
            for(int i=0;i<n;++i)
            {frogs[i]=-1;frogs[i+n+1]=1;}
            frogs[n]=0;
            space=n;
            num=0;
            while(num<M&&action())
            ;
            if(space!=n)
            {cout<<"-1"<<endl;continue;}
            int l;
            for(l=0;l<n;++l)
            if(frogs[l]!=1)
            break;
            if(l<n)
            cout<<"-1"<<endl;
            else
            {
                cout<<num<<endl;
                cout<<ans[0];
                for(int i=1;i<num;++i)
                cout<<" "<<ans[i];
                cout<<endl;
            }
        }
        return 0;
    }
    
  • 相关阅读:
    使用VideoView开发视频总结
    后台接口向数据库录入汉字时乱码以及自动过滤文字经验总结
    8 Crash Reporting Tools For iOS And Android Apps
    Best Mobile Crash Reporting Software
    How do I obtain crash-data from my Android application?
    ACRA (Automated Crash Reporting for Android)
    Debugging Neural Networks with PyTorch and W&B
    OpenPose MobileNet V1
    Real-time-human-pose-estimation-by-pytorch
    openpose-pytorch
  • 原文地址:https://www.cnblogs.com/liulangye/p/2730610.html
Copyright © 2011-2022 走看看