zoukankan      html  css  js  c++  java
  • ncpc2014-Clock Pictures

    Clock Pictures

    kmp

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=2*1e5+10;
    int s[maxn],t[maxn];
    int s1[2*maxn],t1[maxn];
    int Next[maxn];
    int n;
    void get_Next()
    {//Next数组保存了以i结尾的字符串的最长公共前缀和后缀的起始坐标
        int i,j;
        Next[0] = j = -1;
        i = 0;
        while(i < n)
        {
            while(j!=-1&&t1[j]!=t1[i])//自身和自身进行匹配
                j = Next[j];
            Next[++i] = ++j;
        }
    }
    int kmp()
    {
        int i,j;
        i = j = 0;
        int l1=2*n;
        int l2=n;
        while(i < l1&&j<l2)
        {
           if(j==-1||s1[i]==t1[j])
            {
                i++;j++;
            }
            else
                j=Next[j];
    
        }
        if(j == l2)
            return 1;//存在完全匹配状况
        return 0;//不存在匹配情况
    }
    
    int main()
    {
        //freopen("in.txt", "r", stdin);
        ios::sync_with_stdio(false);
        cin >> n;
        for (int i = 0; i < n; i++)
            cin >> s[i];
        for(int i=0; i<n; i++)
            cin>>t[i];
        sort(s, s + n);
        sort(t, t + n);
        for (int i = 1; i < n; i++)
        {
            s1[i - 1] = s[i] - s[i - 1];
    
        }
         for (int i = 1; i < n; i++)
        {
    
            t1[i - 1] = t[i] - t[i - 1];
        }
        s1[n - 1] = 360000 + s[0] - s[n - 1];
        t1[n - 1] = 360000 + t[0] - t[n - 1];
        for (int i = 0; i < n; i++) s1[i + n] = s1[i];
        get_Next();
        bool flag =kmp();
        if (flag)
            cout << "possible" << endl;
        else
            cout << "impossible" << endl;
        return 0;
    }
    View Code
  • 相关阅读:
    关系数据理论
    JavaScript语言——对象
    网络编程基础入门级
    数据库加快查询速度索引
    C/C++随机函数的生成(转载)
    sql连接查询
    深入浅出HTTP请求
    17搜索如何抓全网页
    搜索引擎之百度一下
    搜索引擎之中搜
  • 原文地址:https://www.cnblogs.com/kuroko-ghh/p/9556721.html
Copyright © 2011-2022 走看看