• Lawnmower(洛谷 CF115B)


    题目看这里

    题目大意

    简单来讲就是从(1,1)向左或右或下走,经过所有草坪的最短路程

    思路:

    由于在第一行只能向右走,那么我们就知道,在单数行和双数行分别是向右走和向左走,那么我们在单数行就只需要统计最右边的数,在双数行就只要统计最左边的数,我们储存了"上"一行的位置,那么如果是在单数行,就扫到其最右端,相反,如果是双数行,就扫到其最左端

    特判情况

    如果我们扫了一行后,发现其后面没有草了,这个时候我们就要停止继续向下寻找了

    如何实现呢?

    按照我的思路

    我们用一个bool数组来储存每一行是否有草,由于这个行走是单向的只能向下走,所以特判的情况只在最后几行

    我们用while(b[len]==false&&len>0) len--来计算

    这样我们循环是就只要循环到len行就可以了

    我们用一个ans来统计最后的步数

    这道题目就讲完啦

    #include<bits/stdc++.h>
    using namespace std;
    int n,m;
    int a[200][3];
    bool b[200];
    int c[200];
    int star=0,sum=0,ans;
    int main()
    {
        cin>>n>>m;
        char h;
        for(int i=1;i<=n+1;i++)
            {
                b[i]=false;
                a[i][1]=1;
                a[i][2]=m;
            }
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                cin>>h;
                if(h=='W') b[i]=true;
                if(h=='W'&&j>a[i][1])
                    a[i][1]=j;
                if(h=='W'&&j<a[i][2]) a[i][2]=j;
            }
        }
        star=1;
        sum=0;
        ans=0;
        int len=n;
        while(b[len]==false&&len>0) len--;
        for(int i=1;i<=len-1;i++)
        {
            ++ans;
            if(i%2==1)
            {
                while(star<a[i][1] || star<a[i+1][1]) ++star,++ans;
                //    cout<<star<<" "<<ans<<endl;
                continue;
            }
            while(star>a[i][2] || star>a[i+1][2]) --star,++ans;
            //cout<<star<<" "<<ans<<endl;
        }
    //    cout<<len<<endl;
        if(len==0)
            {
                cout<<0;
                return 0;
    
            }
        if(len%2==1)
            while (star<a[len][1]) ++star,++ans;
        else while(star>a[len][2]) --star,++ans;
        cout<<ans;
        return 0;
    }
        
    /*
    思考一下怎么特判.....
    如果有单数行没有的话,并且在我现在位置的左边
    我们就要在空的那一行向左走到相应位置
    如果空了双数行,我就直接穿过当做不存在
    我们还要记录"1"的个数,方便随时结束我们的寻找....
    大概是这样子的吧...
    */
    代码
  • 相关阅读:
    Caffe proto閱讀
    C++ 基本知識回顧
    Caffe 源碼閱讀(二) SyncedMemory.hpp
    Caffe 源碼閱讀(一) Blob.hpp
    Matlab
    python
    MxNet下训练alexnet(一)
    服务器自己用户名下编译gcc
    Using python to process Big Data
    23 October
  • 原文地址:https://www.cnblogs.com/KSTT/p/10331447.html
Copyright © 2020-2023  润新知