zoukankan      html  css  js  c++  java
  • bzoj4512: [Usaco2016 Jan] Build Gates

    bzoj4512: [Usaco2016 Jan] Build Gates

    Time Limit: 10 Sec  Memory Limit: 128 MB
    Submit: 42  Solved: 16
    [Submit][Status][Discuss]

    Description

    Farmer John decides to build a new fence around parts of his farm, but he keeps getting distracted and ends up building the fence into a much stranger shape than he intended!
     
    Specifically, FJ starts at position (0,0)
    and takes N steps, each moving one unit of distance north, south, east, or west. Each step he takes, he lays a unit of fence behind him. For example, if his first step is to the north, he adds a segment of fence from (0,0) to (0,1)
     
    . FJ might re-visit points multiple times and he may even lay the same segment of fence multiple times. His fence might even cross over itself if his path cuts through a run of fencing he has already built.
     
    Needless to say, FJ is rather dismayed at the result after he completes the fence. In particular, he notices that it may be the case that he has now partitioned off some areas of the farm from others, so that one can no longer walk from one region to another without crossing a fence. FJ would like to add gates to his fences to fix this problem. A gate can be added to any unit-length segment of fence he has built, allowing passage between the two sides of this segment.
     
    Please determine the minimum number of gates FJ needs to build so that every region of the farm is once again reachable from every other region.
     

    Input

    The first line of input contains N(1≤N≤1000). The next line contains a string of length N
    describing FJ's path. Each character is either N (north), E (east), S (south), or W (west).

    Output

    Write out a single integer giving the minimum number of gates FJ needs to build to restore complete connectivity to all regions of his farm. Note that the answer could be zero if the farm is connected to begin with.

    Sample Input

    14
    NNNESWWWSSEEEE

    Sample Output

    2
     
    似乎随便乱搞就可以了呢。。具体实现看代码
    #include<bits/stdc++.h>
    #define rep(i,l,r) for(int i=l;i<=r;i++)
    #define N 2048
    using namespace std;
    bool vis[N][N],shang[N][N],you[N][N];
    int n,x,y,ans;
    char ch[N];
    int main () { 
           scanf("%d",&n);
           scanf("%s",ch+1);
           x=y=1024;
           rep(i,1,n) {
                vis[x][y]=1;
                if(ch[i]=='N') {
                    ++y;
                    if(!shang[x][y-1]&&vis[x][y]) ++ans;
                shang[x][y-1]=1;
                }
                if(ch[i]=='S') {
                     --y;
                     if(!shang[x][y]&&vis[x][y]) ++ans;
                 shang[x][y]=1;
                }
                if(ch[i]=='W') {
                     --x;
                     if(!you[x][y]&&vis[x][y]) ++ans;
                 you[x][y]=1;
                }
                if(ch[i]=='E') {
                     ++x;
                     if(!you[x-1][y]&&vis[x][y]) ++ans;
                 you[x-1][y]=1;
                }
           }
           printf("%d",ans);
    }
    View Code

    HINT

     

    Source

    题意:

  • 相关阅读:
    debian安装后sudo不能用的问题
    分组筛选数据,某个数据字段比如说患者就诊超过一次的,身份证号会重复出现的,sql语句,备忘用的
    《精通Git》翻译系列(二)
    配置mysql允许远程连接
    raspberry pi下使用mp3blaster播放mp3音乐
    MSSQL常用语句备注1
    设计的四大原则
    在树莓派下安装mysql的相关查询记录
    查看数据库日志,收缩数据库
    芒果功效与作用
  • 原文地址:https://www.cnblogs.com/Bloodline/p/5492417.html
Copyright © 2011-2022 走看看