• UVALive 7299 Boggle(深搜的姿势)


      一开始确实是我的锅,我把题意理解错了,以为是一个q周围没有q的时候才可以当时qu,其实是只要碰到q,他就是qu,所以我们也可以通过预处理的方式,把字典中的不满足qu连在一起的直接去掉。

      后来的各种TIE我就表示不能理解了……我换了好多个姿势,改了各种各样的形式,最后改的快跟学长一模一样了,还是TLE……WTF,真是见了鬼了,最后我发现学长的代码里,字符串的长度没有作为参数传进去,而是在里面直接计算的,我的是把长度计算好了,存起来,直接传参进入递归。结果还真就是因为这个,TLE了,我把这个参数去了以后用各种编译器都是3msAC。加上去以后就各种超时……至于是为什么……我现在还不知道,你们要是有谁知道告诉我一声啊…… 反正以后我也会注意这方面的原因,在深搜里,尽量少放参数……

      总体来说,题目并不难,只是我入坑了……

    代码如下:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    #define N 20
    string dic[220];
    int w,D,go[8][2] = {{1,0},{-1,0},{0,-1},{0,1},{-1,-1},{-1,1},{1,-1},{1,1}};
    int vis[N][N];
    char maps[N][N];
    bool flag;
    void dfs(int k,int num,int nowx,int nowy)
    {
        if(flag) return;
        int len = dic[k].length();
        if(maps[nowx][nowy] == 'q')
        {
            if(num+1<len && dic[k][num+1] == 'u')
                num++;
            else return;
        }
        if(num == len-1)
        {
            flag = true;
            return ;
        }
        int xx,yy;
        vis[nowx][nowy] = 1;
        for(int i = 0; i < 8; i++)
        {
            xx = nowx + go[i][0];
            yy = nowy + go[i][1];
            if(xx>=0&&xx<D&&yy>=0&&yy<D && maps[xx][yy] == dic[k][num+1] && !vis[xx][yy])
            {
                dfs(k,num+1,xx,yy);
            }
        }
        vis[nowx][nowy] = 0;
    }
    bool can_out(int k)
    {
        for(int i = 0; i < D; i++)
        {
            for(int j = 0; j < D; j++)
            {
                if(dic[k][0] == maps[i][j])
                {
                    flag = false;
                    memset(vis,0,sizeof(vis));
                    dfs(k,0,i,j);
                    if(flag) return true;
                }
            }
        }
        return false;
    }
    int main()
    {
    //    freopen("I.in.cpp","r",stdin);
        while(~scanf("%d",&w) && w)
        {
            for(int i = 0; i < w; i++)
            {
                cin>>dic[i];
            }
            sort(dic,dic+w);
            while(~scanf("%d",&D))
            {
                if(D==0) break;
                for(int i = 0; i < D; i++)
                {
                    scanf("%s",maps[i]);
                }
                for(int i = 0; i < w; i++)
                {
                    if(can_out(i)) cout<<dic[i]<<endl;
                }
                puts("-");
            }
        }
        return 0;
    }
  • 相关阅读:
    同时使用gitee和github
    vim的四种模式及模式切换
    Vim使用入门
    Vim, Vim Diff, Vim Easy, Vim Read-only 区别
    公钥与私钥
    Linux使用Aria2命令下载BT种子/磁力/直链文件
    Content-Type /AJAX /@ResponseBody
    IDEA 添加serialVersionUID 检查
    Servlet中的Context Path | Servlet Path | Path Info
    第K大的数
  • 原文地址:https://www.cnblogs.com/jifahu/p/5743883.html
Copyright © 2020-2023  润新知