做什么啊,我这么菜,应该弃赛的

[编程|1500分] 子串

时间限制:3秒
空间限制:32768K

题目描述

给出一个正整数n,我们把1..n在k进制下的表示连起来记为s(n,k),例如s(16,16)=123456789ABCDEF10, s(5,2)=11011100101。现在对于给定的n和字符串t,我们想知道是否存在一个k(2 ≤ k ≤ 16),使得t是s(n,k)的子串。

输入描述:

第一行一个整数n(1 ≤ n ≤ 50,000)。
第二行一个字符串t(长度 ≤ 1,000,000)

输出描述:

"yes"表示存在满足条件的k,否则输出"no"

输入例子:

8
01112

输出例子:

yes

这个题很简单啊,这一场的手速题

暴力枚举KMP就好了,我想到了KMP但是没有从网上找模板,找到模板发现自己还是想的不好,最后优化成了这个样子,自我感觉还是很完美的

长度 ≤ 1,000,000,这个也是给我开数组的提示,竟然不坑,反正觉得2进制的1到50k还是不小的

#include <bits/stdc++.h>
using namespace std;
char s[],t[];
int nex[];
int l;
char f[];
void la(int n, int b) {
static char c[]= {'','','','','','','','','','','A','B','C','D','E','F'};
l=;
while(n) {
f[l++]=c[n%b];
n=n/b;
}
}
void pre(char *p) {
int i,n,k;
n=strlen(p);
nex[]=nex[]=;
k=;
for (i=; i<=n; i++) {
for(; k!=&&p[k]!= p[i-]; k=nex[k]);
if(p[k]==p[i-])k++;
nex[i]=k;
}
}
int kmp(char *text, char *p) {
int m,n,s,q;
m=strlen(p);
n=strlen(text);
q=s=;
while (s<n) {
for (q=nex[q]; q<m&&p[q]==text[s]; q++,s++);
if (q== ) s++;
else if(q==m) {
return ;
}
}
return ;
}
int main() {
int n;
scanf("%d",&n);
getchar();
for(int i=; ; i++) {
char c=getchar();
if(c=='\n') {
t[i]=;
break;
}
t[i]=c;
}
pre(t);
for(int j=; j>; j--) {
int b=;
for(int i=; i<=n; i++) {
la(i,j);
for(int k=l-; k>=; k--)
s[b++]=f[k];
}
s[b]=;
if(kmp(s,t))
return *puts("yes");
}
return *puts("no");
}

CodeM初赛B轮的更多相关文章

  1. 【CodeM初赛B轮】F 期望DP

    [CodeM初赛B轮]F 题目大意:有n个景点,m条无向边,经过每条边的时间需要的时间是li,在第i个景点游览花费的时间是ti,游览完第i个景点可以获得的满意度是hi.你的总时间为k,起初你等概率的选 ...

  2. 【CodeM初赛B轮】A 贪心

    [CodeM初赛B轮]A 题目大意:给你一棵树,起初所有点都是白色的,你每次都能选择一个白点i,将这个点i到根路径上的所有到i的距离<k[i]的点都染成黑色(根和i也算,已经被染成黑色的点还是黑 ...

  3. 【CodeM初赛A轮】D 分解质因数+暴力

    题目描述树链是指树里的一条路径.美团外卖的形象代言人袋鼠先生最近在研究一个特殊的最长树链问题.现在树中的每个点都有一个正整数值,他想在树中找出最长的树链,使得这条树链上所有对应点的值的最大公约数大于1 ...

  4. 美团CodeM初赛B轮 合并字符串的价值 (线段树,分类讨论)

    输入两个字符串a和b,合并成一个串c,属于a或b的字符在c中顺序保持不变.如"ACG"和"UT"可以被组合成"AUCTG"或"AC ...

  5. 美团2018年CodeM大赛-初赛B轮 B 配送(最短路)

    美团2018年CodeM大赛-初赛B轮 B 配送 题意 题解 对于每个任务,只要从上个任务的终点出发即可. 时间.地点很少,可以算出每个地点-时间的最小花费. 以题目描述的起点终点起始结束时间建图,很 ...

  6. #6164. 「美团 CodeM 初赛 Round A」数列互质-莫队

    #6164. 「美团 CodeM 初赛 Round A」数列互质 思路 : 对这个题来言,莫队可以 n*根号n 离线处理出各个数出现个的次数 ,同时可以得到每个次数出现的次数 , 但是还要处理有多少 ...

  7. CodeM美团点评编程大赛初赛A轮

    因为语文太差弃赛,第一个追及问题看不懂我就弃赛了.打进复赛确实挺难的,补一下题,锻炼下就行了. 身体训练 时间限制:1秒 空间限制:32768K 美团外卖的配送员用变速跑的方式进行身体训练.他们训练的 ...

  8. codeM美团编程大赛初赛B轮D题

    [编程题] 模 时间限制:1秒空间限制:32768K 给定四个正整数a,b,c,k,回答是否存在一个正整数n,使得a*n在k进制表示下的各位的数值之和模b为c.输入描述:第一行一个整数T(T < ...

  9. CodeM美团点评编程大赛初赛B轮 黑白树【DFS深搜+暴力】

    [编程题] 黑白树 时间限制:1秒 空间限制:32768K 一棵n个点的有根树,1号点为根,相邻的两个节点之间的距离为1.树上每个节点i对应一个值k[i].每个点都有一个颜色,初始的时候所有点都是白色 ...

随机推荐

  1. Failed to crunch file

    Failed to crunch file 编译时,出现以上错误,经过多次排除验证,原因尽然是因为路径字符太长了... 编译路径不能超过240个字符

  2. [Git]常用的Git命令行

    Commit的用法 git init [+项目名] git add . (注意这里在add后面的空格和点是不能省略的) git status git commit -m “message”(这里的me ...

  3. 2002-2003 ACM-ICPC Northeastern European Regional Contest (NEERC 02) A Amusing Numbers (数学)

    其实挺简单的.先直接算出之前已经排在k这个数前面的数字.比如543是三位的,那么100~543都是可以的,两位的10~54. 如果还需要往前面补的话,那么依次考虑1000~5430,5430是上界不能 ...

  4. Android(java)学习笔记136:利用谷歌API对数据库增删改查(推荐使用)

    接下来我们通过项目案例来介绍:这个利用谷歌API对数据库增删改查 1. 首先项目图: 2. 这里的布局文件activity_main.xml: <LinearLayout xmlns:andro ...

  5. python中os.listdir( )函数读取文件夹

    编写pytohn脚本时通常需要批处理. 列出指定目录下的所有文件/文件夹 os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表,但有个很明显的缺点,它的默认顺序不是有序的或 ...

  6. React 官方脚手架 create-react-app快速生成新项目

    进入新公司已经半年了,各个业务线,技术栈都已经熟悉,工作也已经游刃有余,决定慢下脚步,沉淀积累,回顾一下所用技术栈所包含的基本知识,以及再公司中的实战. 首先回顾新项目搭建 react脚手架目前使用较 ...

  7. HTML5中的Web Workers

    https://www.cnblogs.com/yanan-boke/p/6954390.html https://segmentfault.com/a/1190000014938305 HTML5 ...

  8. Problem Y: 哪一天,哪一秒?

    Problem Y: 哪一天,哪一秒? Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 337  Solved: 196[Submit][Status][ ...

  9. k8s1.13.0二进制部署-flannel网络(二)

    Flannel容器集群网络部署 Overlay Network:覆盖网络,在基础网络上叠加的一种虚拟网络技术模式,该网络中的主机通过虚拟链路连接起来.VXLAN:将源数据包封装到UDP中,并使用基础网 ...

  10. 拨出网线后,网卡IP丢失

    /etc/network/interfaces与NetworkManager 问题:在Centos7上把网线拨出后,发现网卡状态是down,并且网卡上的IP丢失 原因:此网卡被NetworkManag ...