HDU 5025 水爆搜

2014
ACM/ICPC Asia Regional Guangzhou Online

水爆搜

N*N矩阵,找最长的一条路径,使‘.’最多,路径可以且最多可以转一次90°。

枚举每个点,枚举8方向连续的‘.’有多少个,再枚举路径方式。

#include "stdio.h"
#include "string.h"
int main()
{

    int n,ans,i,j,k;
    int sum[9];
    char str[101][101];
    while (scanf("%d",&n)!=EOF)
    {
        if (n==0) break;
        ans=0;
        getchar();
        for (i=0;i<n;i++)
            gets(str[i]);

        for (i=0;i<n;i++)
            for (j=0;j<n;j++)
            if (str[i][j]=='.')
            {
                memset(sum,0,sizeof(sum));

                for (k=1;k<=n;k++)
                {
                    if (i-k<0) break;
                    if (str[i-k][j]=='.') sum[1]++; else break;
                }

                for (k=1;k<=n;k++)
                {
                    if (i-k<0 || j+k>=n) break;
                    if (str[i-k][j+k]=='.') sum[2]++; else break;
                }

                for (k=1;k<=n;k++)
                {
                    if (j+k>=n) break;
                    if (str[i][j+k]=='.') sum[3]++; else break;
                }

                for (k=1;k<=n;k++)
                {
                    if (i+k>=n || j+k>=n) break;
                    if(str[i+k][j+k]=='.') sum[4]++; else break;
                }

                for (k=1;k<=n;k++)
                {
                    if(i+k>=n) break;
                    if (str[i+k][j]=='.') sum[5]++; else break;
                }

                for (k=1;k<=n;k++)
                {
                    if (i+k>=n || j-k<0) break;
                    if (str[i+k][j-k]=='.') sum[6]++; else break;
                }

                for (k=1;k<=n;k++)
                {
                    if (j-k<0) break;
                    if (str[i][j-k]=='.') sum[7]++; else break;
                }

                for (k=1;k<=n;k++)
                {
                    if (i-k<0 || j-k<0) break;
                    if (str[i-k][j-k]=='.') sum[8]++; else break;
                }

                if (sum[1]+sum[3]>ans) ans=sum[1]+sum[3];
                if (sum[1]+sum[5]>ans) ans=sum[1]+sum[5];
                if (sum[1]+sum[7]>ans) ans=sum[1]+sum[7];
                if (sum[2]+sum[4]>ans) ans=sum[2]+sum[4];
                if (sum[2]+sum[6]>ans) ans=sum[2]+sum[6];
                if (sum[2]+sum[8]>ans) ans=sum[2]+sum[8];
                if (sum[3]+sum[5]>ans) ans=sum[3]+sum[5];
                if (sum[3]+sum[7]>ans) ans=sum[3]+sum[7];
                if (sum[4]+sum[6]>ans) ans=sum[4]+sum[6];
                if (sum[4]+sum[8]>ans) ans=sum[4]+sum[8];
                if (sum[5]+sum[7]>ans) ans=sum[5]+sum[7];
                if (sum[6]+sum[8]>ans) ans=sum[6]+sum[8];

            }
        ans++;
        printf("%d\n",ans);
    }
    return 0;
}
时间: 2024-10-03 22:55:32

HDU 5025 水爆搜的相关文章

HDU 4735 DLX爆搜

Little Wish~ lyrical step~ Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 417    Accepted Submission(s): 109 Problem Description N children are living in a tree with exactly N nodes, on each n

hdu 5031 Lines 爆搜

其实嘞,这个线可以只延伸一端 然后嘞,爆搜一次就可以 最后嘞,600-800ms过 本弱就是弱啊,你来打我呀-- #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; int a[100][100]; int n,m,ans; bool dfs(int step) { int i,j,t,ii,jj,x,y,cnt,tx,t

HDU 3316 爆搜水题

爆搜水题 模拟扫雷,规则和扫雷一样 给出原图,求在X,Y位置点一下以后的图形,没有弹出的点输出-1,弹出的点输出这个点的数字 从起始点DFS一下即可 #include "stdio.h" #include "string.h" int dir[8][2]={ {-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1} }; int n; int hash[110][110]; char str[110][110]; i

HDU 4403 A very hard Aoshu problem(dfs爆搜)

http://acm.hdu.edu.cn/showproblem.php?pid=4403 题意: 给出一串数字,在里面添加一个等号和多个+号,使得等式成立,问有多少种不同的式子. 思路: 数据量比较小,直接dfs爆搜答案即可. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<map> 6 using nam

poj1077 Eight【爆搜+Hash(脸题-_-b)】

题目链接:http://poj.org/problem?id=1077 题目描述:民间流传的推15游戏,不过这里简化为3*3,也就是八数码问题,‘x’表示空位.与AOJ0121的“Seven Puzzle”类似. 思路:没什么特别的,构造字符串队列,爆搜一下.注意Hash函数,哈得好就哈哈,哈得不好就只能呵呵了...我的hash函数是∑((str[i]*7^i))%1000007外加在x的位置加上i*10007,547MS水过.不过在一样的题hdu1043时限变成了5秒却还是TLE了,果然此题杭

HDU 5025 Saving Tang Monk(广州网络赛D题)

HDU 5025 Saving Tang Monk 题目链接 思路:记忆化广搜,vis[x][y][k][s]表示在x, y结点,有k把钥匙了,蛇剩余状态为s的步数,先把图预处理出来,然后进行广搜即可 代码: #include <cstdio> #include <cstring> #include <queue> using namespace std; const int INF = 0x3f3f3f3f; const int N = 105; const int

hdu5355 思维+爆搜

pid=5355">http://acm.hdu.edu.cn/showproblem.php?pid=5355 Problem Description There are?m?soda and today is their birthday. The?1-st soda has prepared?n?cakes with size?1,2,-,n. Now?1-st soda wants to divide the cakes into?m?parts so that the total

8/2 multi4 E找规律+模拟,空间开小了然后一直WA。。。J爆搜check不严谨WA。。。multi3 G凸包判共线写错数组名???样例太好过.想哭jpg。

multi4 Problem E. Matrix from Arrays 题意:构造一个数组,求子矩阵前缀和. 思路:打表找规律,"发现"L为奇数时循环节为L,为偶数时循环节为2L,求相应循环节的二维前缀和然后加加减减计算一下就好. 虚伪地证明一下循环节:L为奇数时对于第x行/列开始的位置有(x  +  x+L-1)*L/2   ->     (2x+L-1)/2(为整数)*L,因此扫过L行/列也就扫过了L整数倍"(2x+L-1)/2"倍的A[0]~A[L],

关于爆搜

关于爆搜 ? (这还用说,讲者太菜了) ? 爆搜通常是没有思路时一个 优秀 玄学的解题方法,但同样是搜索,我们所的分数却相差甚远,即搜索的优化问题; 前言 ? 这是很基础的东西,这里只作为回顾. ? 讲着实力不足,请不要D讲者; BFS ? BFS,广度优先搜索,用于逐层拓展的工具,可以有效地通过比较同一层之间的结果进行有效地减枝,而相比之下DFS的减枝就比较玄学,故能用BFS时,BFS的时间复杂度一般比DFS要低很多; ? BFS也是SPFA的实现基础 虽然SPFA已经死了 . ? BFS有双