BZOJ_3916_[Baltic2014]friends_hash】的更多相关文章

BZOJ_3916_[Baltic2014]friends_hash 题意: 有三个好朋友喜欢在一起玩游戏,A君写下一个字符串S,B君将其复制一遍得到T,C君在T的任意位置(包括首尾)插入一个字符得到U.现在你得到了U,请你找出S. 分析: 字符串哈希 首先n%2==0一定没有答案 枚举插入的字符,拿出来,判断一下前后两半串的哈希值是否相等 具体做法:一个串被一个字符隔开了,它的哈希值等于前面串的哈希值*base^(len[后面串])+后面. 代码: #include <cstdio> #in…
字符串哈希..然后枚举每一位+各种判断就行了 -------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm>   using namespace std;   typedef long long ll;   const int MOD = 1000000007; c…
http://www.lydsy.com/JudgeOnline/problem.php?id=3916 #include <bits/stdc++.h> using namespace std; int n, ans[3]; char s[2000005]; void work(int now) { int l=1, r=n-(n>>1); if(now<2) ++r; int flag=0; //printf("%d\n", now); for(int…
预处理出每个点上下左右能延伸到的最远点以及到它们的距离的最小值md. 然后spfa,一个点除了可以以1的代价到达四周的点之外,还可以以md+1的代价到达四个方向能到达的最远点. #include<cstdio> const int N=1010,M=4194303; int n,m,i,j,z,x,y,loc[N][N][4],dis[N][N][4],md[N][N],d[N][N],q[M+1][2],h,t; bool a[N][N],in[N][N];char s[N]; inline…
Description  序列A由从N开始的连续K个数按顺序构成,现在将A中的每个数只保留某一个数码,记为序列B,给定K和B,求可能的最小的N Input 第一行一个数K,第二行K个数B_i Output 输出一个数N 当确定了N的个位时,可以确定这连续的K个数的个位,这是得到子问题求N/10的值,B数组(压位表示子问题中哪些位必须出现)对应更新为大约K/10的长度,于是可以递归处理,当K=1时贪心确定所需的最高位 当K=2时若选择个位为9则递归下去K仍为2,要特判剪枝一下 递归到K=1时,若答…
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3916 复习一下hash(然后被傻叉错误卡了半天TAT... 取出一个字串:h[r]-h[l-1]*power[r-l+1]  然后匹配... 注意一下当前需要的是s[i]还是s[i-1],做hash数组时不要写s[i]-'A',写s[i],否则容易被卡 对于这道题,枚举一下断点,注意判重. 对于这种有断点的前面一段+后面一段等于完整一段,要注意前面那一段乘的权. #include<cstri…
题面戳我 Solution 首先长度为偶数可以直接判掉 然后我们可以枚举删的位置,通过预处理的\(hash\),判断剩余部分是否划分成两个一样的 判重要注意,我们把字符串分为三个部分\(L_l+1+L_r\),(\(L_l=L_r\)),如果上次答案和这次都出现在\(L_l\),则一定不会是不同的,因为右边的\(L_r\)是一样的,所以复制的串一定是一样的,全在\(L_r\)同理 那么我们就只用判断上次出现的答案在\(L_l+1\)上,这次出现在\(L_r\)上,其实我们就可以发现复制的串变成了…
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3916 题解:随便hash.刚开始看错题WA了N发.(我连双hash都写了!) 代码: #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<algorithm> #include<iostream> #include<vec…
嘟嘟嘟 首先想想暴力的做法,枚举加入的字符,然后判断删去这个字符后两个长度为n / 2的字符串是否相等,复杂度O(n2). 所以可以想办法把判断复杂度降低到O(1),那自然就想到hash了.hash是能做到O(n)预处理,然后O(1)比较的. 取一段的hash值:hash[L, R] = hash[1, R] - hash[1, L - 1] * baseR - L + 1.这个也好理解,就是前面的hash[1, L - 1]为整个hash值贡献了hash[1, L - 1] * baseR -…
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3918 [题解] 每日至少更一题啊qwq凑任务(迷 明显猜个结论:随便搜环就行了 然后搜环姿势错了我也很无奈啊... # include <stdio.h> # include <string.h> # include <algorithm> // # include <bits/stdc++.h> using namespace std; typede…