BZOJ3916: [Baltic2014]friends】的更多相关文章

题目: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\)上,其实我们就可以发现复制的串变成了…
枚举断点,哈希判断. #include<cstdio> using namespace std; typedef unsigned long long ull; ull hs,hs1,hs2,seeds[1000010],hsgoal; int n; int del=-1; char s[2000002],s2[2000002]; int main() { seeds[0]=1; for(int i=1;i<=1000009;++i) seeds[i]=seeds[i-1]*31; sc…
题目描述 有三个好朋友喜欢在一起玩游戏,A君写下一个字符串S,B君将其复制一遍得到T,C君在T的任意位置(包括首尾)插入一个字符得到U.现在你得到了U,请你找出S. 输入 第一行一个数N,表示U的长度. 第二行一个字符串U,保证U由大写字母组成 输出 输出一行,若S不存在,输出"NOT POSSIBLE".若S不唯一,输出"NOT UNIQUE".否则输出S. 样例输入 Sample Input1: 7 ABXCABC Sample Input2: 6 ABCDEF…
字符串哈希..然后枚举每一位+各种判断就行了 -------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm>   using namespace std;   typedef long long ll;   const int MOD = 1000000007; c…
BZOJ_3916_[Baltic2014]friends_hash 题意: 有三个好朋友喜欢在一起玩游戏,A君写下一个字符串S,B君将其复制一遍得到T,C君在T的任意位置(包括首尾)插入一个字符得到U.现在你得到了U,请你找出S. 分析: 字符串哈希 首先n%2==0一定没有答案 枚举插入的字符,拿出来,判断一下前后两半串的哈希值是否相等 具体做法:一个串被一个字符隔开了,它的哈希值等于前面串的哈希值*base^(len[后面串])+后面. 代码: #include <cstdio> #in…
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.刚开始看错题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…
题目链接: 传送门 题目: Description 有三个好朋友喜欢在一起玩游戏,A君写下一个字符串S,B君将其复制一遍得到T,C君在T的任意位置(包括首尾)插入一个字符得到U.现在你得到了U,请你找出S. Input 第一行一个数N,表示U的长度. 第二行一个字符串U,保证U由大写字母组成 Output 输出一行,若S不存在,输出"NOT POSSIBLE".若S不唯一,输出"NOT UNIQUE".否则输出S. 题目分析: 枚举断点+字符串前缀和哈希 如果一个字…
[题解] 暴力枚举添加字符的位置,然后判断去掉这个位置的字符串是否有由两个相同的串拼接而成.本题的n的范围为200W,暴力判断会TLE,所以要使用哈希. #include<cstdio> #include<algorithm> #include<cstring> #include<map> #define LL long long #define N 2000010 #define rg register #define base (107) using n…
问题描述 输入格式 输出格式 一个整数R 样例输入 7 9 4 8 20 14 15 18 样例输出 13 数据范围 所求的Z序列为6,7,8,13,14,15,18. R=13 解析&左偏树详解 IOI2005国家集训队论文 黄源河 代码 #include <iostream> #include <cstdio> #define N 1000002 using namespace std; int n,i,j,a[N],son[N][2],fa[N],dis[N],num…
字符串\(Hash\). 笔者实在太菜了,到现在还没有熟练掌握\(Hash\),就来这里写一篇学习笔记. \(Description\) 有三个好朋友喜欢在一起玩游戏,\(A\)君写下一个字符串\(S,B\)君将其复制一遍得到\(T,C\)君在T的任意位置(包括首尾)插入一个字符得到\(U\).现在你得到了\(U\),请你找出\(S.\) \(Input\) 第一行一个数\(N\),表示\(U\)的长度. 第二行一个字符串\(U\),保证\(U\)由大写字母组成 \(Output\) 输出一行,…
[来源]:bzoj3916 [参考博客] BZOJ3916: [Baltic2014]friends [ 哈希和哈希表]Three Friends [Baltic2014][BZOJ3916]friends [题解] 首先hash整个串,然后分成三种情况,分别是前半段,中间,后半段,三段的字母试图去掉看能否拼起来. 如果可以,那么还需要考虑是否为唯一的. 唯一的意思是: 串S,如果有选择两个不同的串S也能构成这个原串. 代码还是参考别人写的. #include<cstdio> #include…
9/30 BZOJ3038:线段树,不带lazy标记,直接修改叶子. BZOJ3211:同3038 BZOJ1406:将式子转换成[(x-1)*(x+1)%n==0]然后枚举i.当i=x-1时,i*(i+2)%n==0;当i=x+1时,i*(i-2)%n==0;i是n的因数 BZOJ3916:字符串hash.分类讨论字符的位置. BZOJ1589:缩点后是个DAG,然后DAG上dp BZOJ1072:状压dp,或者暴力.都需要去重.不过暴力可以不用组合数学. BZOJ1419:期望dp,设dp[…
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem 10983 18765 Y 1036 [ZJOI2008]树的统计Count 5293 13132 Y 1588 [HNOI2002]营业额统计 5056 13607 1001 [BeiJing2006]狼抓兔子 4526 18386 Y 2002 [Hnoi2010]Bounce 弹飞绵羊 43…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3916 (BZOJ3916) 由题意可知 \(N\) 得为奇数,\(S\) 才存在,所以先特判 \(N\) 为偶数的情况. 由题意可知 \(S\) 的长度为 \(\lfloor \dfrac {N}{2}\rfloor\), 设 \(S\) 的长度为 \(M\). 如果存在 \(S\),则 \(S\) 一定是 \(U\) 的前 \(M\) 个字符或后 \(M\) 个字符. 用 substr…