2014 网选 5024 Wang Xifeng's Little Plot

题意:从任意一个任意一个可走的点开始找一个最长的路,这条路如果有转弯的话,
那么必须是 90度,或者没有转弯!

思路: 首先用dfs将所有可走点开始的 8 个方向上的线段的最长长度求出来 !
step[i][j][k] 表示的是(i,j)沿着k方向一直走到头或者转弯时的最长步数!
最后枚举每一个可走点转弯为90度的路径,找到最长的长度!

step[i][j][k1] + step[i][j][k2] 就是 (i, j)这个点 k1 和 k2方向构成90度!

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define  N  105
using namespace std;

int step[N][N][8];
int dir[8][2] = { {0, 1}, {1, 0}, {-1, 0}, {0, -1}, {-1, -1}, {1, 1}, {-1, 1}, {1, -1} };
int index[8][2] = { {0, 1}, {1, 3}, {2, 3}, {0, 2}, {5, 6}, {5, 7}, {4, 7}, {4, 6}};//每一个节点所对应的转弯的枚举
char mp[N][N], vis[N][N];
int n;

bool judge(int x, int y){
    if(x < 1 || y < 1 || x > n || y > n)
        return false;
    if( mp[x][y] == '#')  return false;

    return true;
}

void dfs(int x, int y){
    for(int i = 0; i < 8; ++i){
        int xx = x + dir[i][1];
        int yy = y + dir[i][0];
        if(!judge(xx, yy))
            step[x][y][i] = 1;
        else{
            if( !step[xx][yy][i] )//记忆话的赶脚
                dfs(xx, yy);
            step[x][y][i] = 1 + step[xx][yy][i];
        }
    }
}

int main(){
    while(scanf("%d", &n) && n){
        memset(step, 0, sizeof(step));
        memset(vis, 0, sizeof(vis));
        for(int i = 1; i <= n; ++i)
            scanf("%s", mp[i]+1);

        for(int i = 1; i <= n; ++i)
            for(int j = 1; j <= n; ++j)
                if(mp[i][j] == '.')
                           dfs(i, j);

        int maxN = -1;
        for(int i=1; i <= n; ++i)
            for(int j = 1; j <= n; ++j){
                if(mp[i][j] == '.')
                    for(int k = 0; k < 8; ++k)
                        maxN = max(maxN, step[i][j][index[k][0]] + step[i][j][index[k][1]] );
            }
        printf("%d\n", maxN - 1);//因为多加了一次拐点!
    }
    return 0;
}
时间: 2024-08-05 06:56:32

2014 网选 5024 Wang Xifeng's Little Plot的相关文章

2014 网选 广州赛区 hdu 5025 Saving Tang Monk(bfs+四维数组记录状态)

/* 这是我做过的一道新类型的搜索题!从来没想过用四维数组记录状态! 以前做过的都是用二维的!自己的四维还是太狭隘了..... 题意:悟空救师傅 ! 在救师父之前要先把所有的钥匙找到! 每种钥匙有 k 种, 每一种有多个! 只要求找到每一种的其中一个就可以! 找钥匙的顺序按照 第1种, 第2种, 第3种 ....第k种! 找钥匙的时间是一步, 走到相邻空地的时间是一步, 打蛇的时间就是两步! 求找到师傅的最少步数! 这里说一下 state[N][N][10][35]表示的含义: ->state[

2014 网选 5014 Number Sequence(异或)

/* 题意:a, b两个序列,规定由[0, n]区间的数! 求 a[i] ^ b[i] 的和最大! 思路:如果数字 n的二进制有x位, 那么一定存在一个数字m,使得n^m的所有二进制位 都是1,也就是由x位1!这样下去的到的值就是最大值! */ #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #define N 100005 using namespace s

2014 网选 上海赛区 hdu 5047 Sawtooth

题意:求n个'M'型的折线将一个平面分成的最多的面数!思路:我们都知道n条直线将一个平面分成的最多平面数是 An = An-1 + n+1也就是f(n) = (n*n + n +2)/2对于一个'M'型的折线呢?它有四条线,但是由于三个顶点的关系导致划分的平面的数目减少了9个!所以有递推公式 f(n) = (m*m + m + 2)/2 - 9*n; m = 4*n 最后 f(n) = (8*n+1)*(n-1)+2) 由于 n<=1e12 , 所以回报 long long!那么对于大于1e9的

2014 网选 广州赛区 hdu 5023 A Corrupt Mayor&#039;s Performance Art

#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #define N 1000005 using namespace std; int c[35]; int tree[N*4];//正值表示该节点所管理的区间的颜色是纯色,-1表示的是非纯色 int n, m; void buildT(int ld, int rd, int p){ if(ld <= rd)

2014 网选 5011 Game(Nim游戏,数学题)

/* 题意:Nim游戏! 思路:通过异或,判断将n个数表示成二进制的形式之后,是否对应位的数字1 的个数是偶数! */ #include<iostream> using namespace std; int main(){ int n, x, s; while(cin>>n){ s=0; while(n--){ cin>>x; s^=x; } if(s) cout<<"Win";//不是偶数 else cout<<"

2014 网选 5012 Dice(bfs模板)

/* 题意:就是给定两个筛子,每个筛子上6个面,每个面的数字属于[1,6], 且互不相同! 问a筛子最少经过按照题目规定的要求转动,达到和b筛子上下左右前后的数字相同! 思路:很直白的bfs,将每一种状态对应一个数字,保证这种状态不会重新加入队列中! */ #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using

品牌与域名的完美匹配,万网启用“wan.wang”域名

3月25日消息,日前,国内域名行业迎来了2015年头条新闻.国内最大的域名注册商---万网正式启用了"wan.wang"域名,与现有的域名一起作为万网的主域名. 分析人士指出,随着传统COM.CN域名后缀资源的日益枯竭,新域名后缀将成为新的选择方向,作为域名行业嗅觉最敏锐的注册商,万网注册并正式启用wan.wang域名,无疑表明了对作为新后缀领袖.wang域名的绝对看好.   品牌与域名的完美匹配   万网启用wan.wang域名,标志着双方已经正式进入深度合作阶段.业内人士表示,wa

网易云音乐发布2014年度中国移动音乐用户行为报告

日前,网易云音乐对全国音乐软件用户进行了详尽调查,通过海量数据分析得出<2014中国人移动音乐用户行为报告>.该报告主要对中国移动音乐用户行为进行分析,研究各种因素对移动音乐用户行为产生的影响,移动音乐软件内容特点及行业发展.期望为市场各方面提供参考.报告显示,移动音乐用户与收入有关,不同收入人群对音乐软件选择有较大差异:2014年,移动音乐用户最多的行为除听歌外,分享单曲.歌词以及音乐评论等社交行为较前一年有数倍增长.提升显著.第一部分:用户年龄.性别.收入等基本属性85后占移动音乐听众主流

万网启用域名wan.wang,万网与.wang双方合作迈入新台阶

域名城(domain.cn)1月19日消息,最新消息,国内最大的域名注册商万网计划启用新域名wan.wang,万网启用wan.wang域名标志着.wang后缀再次赢得注册商的青睐.业内人士指出,wan.wang非常适合万网作为自己的企业域名,无论从品牌与域名的契合度上还是从现在的拼音域名趋势上都达到了高度完美统一.万网启用wan.wang也由此标志着万网与.wang双方的合作将迈入一个新台阶.   据黄道科技方面介绍,万网在12月25日与.wang建立合作后,双方在市场宣传.产品价格以及资源等方