2017 UESTC Training for Search Algorithm & String

2017 UESTC Training for Search Algorithm & String

A   next[]数组应用

题意:求一个字符串所有前缀出现的次数和。

tags:  dp[i-1] = dp[next[i]] + 1。

D   字符串next[]数组

题意:求给出字符串的最短循环节。

tags:看了题解,原来next[]数组可以这样搞。。

思考KMP的next数组的定义:next[j] = i 代表 s[1...(i-1)] = s[j - i, j-1]。 并且i~j之间已经不可能有以j结尾的子串是前缀了,不然next[j]就不是 i 了。那么很显然,字符串的最短循环节长度为 len - next[len]。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<bitset>
#include<vector>
#include<set>
#include<list>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define rep(i,a,b) for (int i=a;i<=b;i++)
#define per(i,b,a) for (int i=b;i>=a;i--)
#define mes(a,b)  memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
typedef long long ll;
const int N = 1000005;

int nex[N];
void getnext(char *B, int lenb)
{
    mes(nex, 0);   nex[0]=-1;
    for(int i=0,k=-1; i<lenb; )
    {
        if(k==-1 || B[i]==B[k]) nex[++i]=++k;
        else k=nex[k];
    }
}
char A[N];
int main()
{
    scanf("%s", A);
    int len=strlen(A);
    getnext(A, len);
    printf("%d\n", len-nex[len]);

    return 0;
}

I   dfs,九皇后,水题,但调了好久,还是不熟练啊

#include<bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define rep(i,a,b) for (int i=a; i<=b; ++i)
#define per(i,b,a) for (int i=b; i>=a; --i)
#define mes(a,b)  memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
#define MP make_pair
#define PB push_back
#define fi  first
#define se  second
typedef long long ll;
const int N = 200005;

int n, sta[20], top;
bool vis1[20], vis2[20], vis3[20], vis4[20];
void dfs(int x, int y)
{
    sta[++top]=y;
    if(top==9)
    {
        rep(i,1,top) printf("%d ", sta[i]);
        puts("");
        --top;
        return ;
    }
    vis1[x]=vis2[y]=vis3[x+y]=vis4[y+n-x]=1;
    rep(i,x+1,n) rep(j,1,n)
        if(!vis1[i] && !vis2[j] && !vis3[i+j] && !vis4[j+n-i])
        {
            dfs(i, j);
        }
    --top;
    vis1[x]=vis2[y]=vis3[x+y]=vis4[y+n-x]=0;
}
int main()
{
    scanf("%d", &n);
    printf("352\n");
    rep(j,1,n) dfs(1, j);

    return 0;
}

时间: 2024-08-05 07:05:46

2017 UESTC Training for Search Algorithm & String的相关文章

2018 UESTC Training for Search Algorithm &amp; String

Link A 题意 给两个字符串S,T,问S的所有前缀在T中出现的次数和 分析 kmp SAM后缀数组 2018 UESTC Training for Search Algorithm & String 原文地址:https://www.cnblogs.com/Deadline/p/9127493.html

UESTC_Palindromic String 2015 UESTC Training for Search Algorithm &amp; String&lt;Problem M&gt;

M - Palindromic String Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 128000/128000KB (Java/Others) Submit Status 秋实大哥喜欢探索新鲜事物,最近他发明了一种新型回文串,叫K重回文串!今天他想用它来考考小朋友们. 秋实大哥给出了与K重回文串有关的信息 任何字符串都属于0重回文串,包括空字符串. 一个长度为N的字符串S,S是K(k≥1)重回文串,当且仅当S是回文串,且其

UESTC_韩爷的梦 2015 UESTC Training for Search Algorithm &amp; String&lt;Problem N&gt;

N - 韩爷的梦 Time Limit: 200/100MS (Java/Others)     Memory Limit: 1300/1300KB (Java/Others) Submit Status 一天,韩爷去百度面试,面试官给了他这么一个问题. 给你2万个字符串,每个字符串长度都是100,然后把2万个字符串丢入一个 set< string >g 中,问最终set里含有多少个元素? g 是一个用来存储字符串.具有去重功能的容器,即相同字符串在 g 中只能保留一个. 两个字符串相等,当且

UESTC_Ferris Wheel String 2015 UESTC Training for Search Algorithm &amp; String&lt;Problem L&gt;

L - Ferris Wheel String Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 43000/43000KB (Java/Others) Submit Status Have you ever been to London? Our Master Qiu will tell you how amazing in London and how funny a Ferris Wheel String is. One day

UESTC_秋实大哥の恋爱物语 2015 UESTC Training for Search Algorithm &amp; String&lt;Problem K&gt;

K - 秋实大哥の恋爱物语 Time Limit: 5000/2000MS (Java/Others)     Memory Limit: 32000/32000KB (Java/Others) Submit Status 传说有这么一个故事! 在一个月白风清的晚上,秋实大哥约一位他心仪的妹子一起逛校园,浪漫的秋实大哥决定在当晚对妹子表白.“XXXXX...”,秋实大哥温情地说完了准备已久的话.而妹子决定用一种浪漫的方式接受秋实大哥(其实妹子早已对秋实大哥动心,这一刻她早已迫不及待了,但还是决定

UESTC_Eight Puzzle 2015 UESTC Training for Search Algorithm &amp; String&lt;Problem F&gt;

F - Eight Puzzle Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status The 15-puzzle has been around for over 100 years; even if you don't know it by that name, you've seen it. It is constructed with 15 sli

UESTC_吴队长征婚 2015 UESTC Training for Search Algorithm &amp; String&lt;Problem E&gt;

E - 吴队长征婚 Time Limit: 10000/4000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 吴队长征婚这件事因为请客而没有传出去(虽然他忘了请一个队吃饭),于是吴队长高兴地玩起了木棒.吴队长拿了一些长度相同的木(guang)棒(gun),随机的把它们截成了N段,每一段最长50.现在他想把这些木棒还原成原来的状态,但是他忘记了原来的木棒有多少根,也忘记了每一根有多长.请帮助

UESTC_基爷的中位数 2015 UESTC Training for Search Algorithm &amp; String&lt;Problem D&gt;

D - 基爷的中位数 Time Limit: 5000/3000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 给你N个数,X1,X2,...,XN, 基爷让我们计算任意两个数差的绝对值 ∣Xi−Xj∣ (1≤i<j≤N) . 这样,我们可以得到 C2N 个数. 现在,基爷希望聪明的你能用一个简单的程序求出这 C2N 个数的中位数! Input 输入有多组数据. 每组数据,第一行一个整数 N

UESTC_基爷与加法等式 2015 UESTC Training for Search Algorithm &amp; String&lt;Problem C&gt;

C - 基爷与加法等式 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 一天,上小学的妹妹跑过来问基爷一道字母加法等式,基爷不假思索的便给出了一组可行解. 聪明的你发现,一个字母等式可能有多种不同解,于是你想编个程序计算一下 Input 输入包含多组数据. 每组数据第一行一个整数n,表示有n个字符串 3 ≤ n ≤ 10 接下来n行,每行有1个最多只