zoukankan      html  css  js  c++  java
  • google china code jam入围赛的一个题

    连了1个多小时都没登陆成功,就去群里聊天。听朋友说了个题目,我觉得有思路就写了一下。
    后来终于登陆成功了,可惜我分配到19组题目不一样- -。

    问题是这样的,一个m*n的字母矩阵内可以找到多少8连通路径匹配一个长度为k的串。m,n,k都不超过50
    如果匹配数量超过10^9就直接返回-1.

    #pragma warning(disable:4786)
    #include 
    <vector>
    #include 
    <string>
    #include 
    <cstdio>
    using namespace std;
    class A
    {
    public:
        
    int get(vector< string > _map, string a)
        
    {
            
    const int max = 1000000000;
            
    char map[52][52= {0};
            
    int m = _map.size(), n;
            
    int i, j;
            
    string::size_type k;
            
    for (i = 0; i < m; i++)
            
    {
                strcpy(map[i
    +1+ 1, _map[i].c_str());
            }

            n 
    = _map[0].size();
            
            
    int count[2][52][52= {0};
            
    {
                
    int (&pd)[52][52= count[0];
                
    char c = a[0];
                
    for (i = 1; i <= m; i++)
                
    {
                    
    for (j = 1; j <= n; j++)
                    
    {
                        
    if (map[i][j] == c)
                            pd[i][j] 
    = 1;
                    }

                }

            }

            
            
    for (k = 1; k < a.size(); k++)
            
    {
                
    int (&pd)[52][52= count[k%2];
                
    int (&ps)[52][52= count[(k+1)%2];
                memset(pd, 
    0sizeof(int* 52 * 52);
                
    char c = a[k];
                
    for (i = 1; i <= m; i++)
                
    {
                    
    for (j = 1; j <= n; j++)
                    
    {
                        
    if (map[i][j] != c) // 这里把map写成了_map,谢谢
                            
    continue;
                        pd[i][j] 
    = ps[i-1][j-1]+ps[i][j-1];
                        
    if (pd[i][j] > max) return -1;
                        pd[i][j] 
    += ps[i+1][j-1];
                        
    if (pd[i][j] > max) return -1;
                        pd[i][j] 
    += ps[i-1][j];
                        
    if (pd[i][j] > max) return -1;
                        pd[i][j] 
    += ps[i+1][j];
                        
    if (pd[i][j] > max) return -1;
                        pd[i][j] 
    += ps[i-1][j+1];
                        
    if (pd[i][j] > max) return -1;
                        pd[i][j] 
    += ps[i][j+1];
                        
    if (pd[i][j] > max) return -1;
                        pd[i][j] 
    += ps[i+1][j+1];
                        
    if (pd[i][j] > max) return -1;
                    }

                }

            }

            
    int sum = 0;
            
    int (&ps)[52][52]=count[(k+1)%2];
            
    for (i = 1; i <= m; i++)
            
    {
                
    for (j = 1; j <= n; j++)
                
    {
                    sum 
    += ps[i][j];
                    
    if (sum > max)
                        
    return -1;
                }

            }

            
    return sum;
        }

        
    }
    ;
    /*
    {"AAAAA",
    "AAAAA",
    "AAAAA",
    "AAAAA",
    "AAAAA"}
    "AAAAAAAAAAA"
    Returns: -1
    超过1,000,000,000的路径,则直接返回-1. 
    kaikai (30170377) 22:38:25
    复杂度m*n*k 
    沐枫(Liny)(189416) 22:28:47
    {"AB",
    "CD"}
    "AA"
    结果:0 
    沐枫(Liny)(189416) 22:30:42
    {"AA",
    "AA"}
    "AAAA"
    结果: 108 
    */

    #include 
    <cstdio>

    int main()
    {
        A a;
        vector
    < string > d1;
        d1.push_back(
    "AAAAA");
        d1.push_back(
    "AAAAA");
        d1.push_back(
    "AAAAA");
        d1.push_back(
    "AAAAA");
        d1.push_back(
    "AAAAA");
        printf(
    "%d\n", a.get(d1, "AAAAAAAAAAA"));
        vector
    < string > d2;
        d2.push_back(
    "AB");
        d2.push_back(
    "CD");
        printf(
    "%d\n", a.get(d2, "AA"));
        vector
    < string > d3;
        d3.push_back(
    "AA");
        d3.push_back(
    "AA");
        printf(
    "%d\n", a.get(d3, "AAAA"));
        
    return 0;
    }
  • 相关阅读:
    android 图表
    android assets 文件路径,与文件是否存在
    WebKit 与Chromium
    android footerView 的使用
    android gif
    webkit 介绍
    java 内存优化2
    jive论坛
    ajax josn
    jsp 数据饼图
  • 原文地址:https://www.cnblogs.com/kaikai/p/296597.html
Copyright © 2011-2022 走看看