【BZOJ3916】【Baltic2014】friends 暴力

链接:

#include <stdio.h>
int main()
{
    puts("转载请注明出处[vmurder]谢谢");
    puts("网址:blog.csdn.net/vmurder/article/details/44893857");
}

前言

妈呀我调了两个多小时,

就特么因为一个运算符优先级的问题?……!!!

太弱了。你们D我吧,那道题的提交都是我刷上去的Qwq

题解

首先S串如果存在,一定是U串(长度姑且设为2n+1,偶数则直接impossible)的[1,n]或者[n+2,2n+1]。。

然后我们可以暴力匹配,允许一次失配(就是第一次失配就跳过接着匹配。)

然后如果匹配完全串了,就是一种可行S串。

然后如果正着反着都成功了,可能U串是 S+一个字符+S。需要特判。

代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 2001000
using namespace std;
bool a,b,c;
char s[N];
int n,m;
int main()
{
    int i;
    scanf("%d%s",&m,s+1),n=m>>1;
    if(m+1&1)
    {
        puts("NOT POSSIBLE");
        return 0;
    }

    for(i=1;i<=n&&s[i+n]==s[i];i++);
    for(;i<=n&&s[i+n+1]==s[i];i++);
    if(i>n)a=1;

    for(i=0;i<n&&s[m-i]==s[m-i-n];i++);
    for(;i<n&&s[m-i]==s[m-i-n-1];i++);
    if(i>=n)b=1;

    if(a&b)
    {
        for(i=1;i<=n&&s[i]==s[i+n+1];i++);
        if(i<=n)puts("NOT UNIQUE");
        else for(i=1;i<=n;i++)printf("%c",s[i]);
    }
    else if(a)for(i=1;i<=n;i++)printf("%c",s[i]);
    else if(b)for(i=n-1;~i;i--)printf("%c",s[m-i]);
    else puts("NOT POSSIBLE");
    return 0;
}
时间: 2024-10-05 04:44:54

【BZOJ3916】【Baltic2014】friends 暴力的相关文章

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

【字符串哈希】bzoj3916 [Baltic2014]friends

枚举断点,哈希判断. #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

【bzoj3916】[Baltic2014]friends 字符串hash

题目描述 有三个好朋友喜欢在一起玩游戏,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

二叉树的后序遍历(暴力版) 小白菜oj 1034

给出二叉树的前序遍历和中序遍历,求二叉树的后序遍历-- 作为一个搜索蒟蒻,我真的没有办法很和谐的A掉,但估计过几天就会写有关这个题的和谐的解法--但只是估计-- 下面讲述我的超暴力解法-- 首先,先由前序遍历得到一个父亲节点,然后再由中序遍历得到这个父亲节点的左子树和右子树中的元素(中序遍历中,该点的左边的所有点,都在它的左子树,右边的都在它的右子树,子树中的根节点是在这些节点的前序遍历中排名最靠前的),然后递归建树,之后在递归求后序遍历即可. 但这个方法有两个比较--&¥--&的问题:1

玲珑杯 round18 A 计算几何瞎暴力

题目链接 : http://www.ifrog.cc/acm/problem/1143 当时没看到坐标的数据范围= =看到讨论才意识到,不同的坐标最多只有1k多个,完全可以暴力做法,不过也要一些技巧. 首先注意数很大可能爆int,用LL得话注意强制转换或者全设为LL,假如  int a=50000,b=a;  LL sum=a*b; 则会爆出,除非ab都是LL 或者 sum=(LL)a*(LL)b; 还有就是R最大就是30,我们不妨设ans[i]表示R<=i的组合个数,做一个前缀和方便快速询问.

Vijos P1066 弱弱的战壕【多解,线段树,暴力,树状数组】

弱弱的战壕 描述 永恒和mx正在玩一个即时战略游戏,名字嘛~~~~~~恕本人记性不好,忘了-_-b. mx在他的基地附近建立了n个战壕,每个战壕都是一个独立的作战单位,射程可以达到无限(“mx不赢定了?!?”永恒[email protected][email protected]). 但是,战壕有一个弱点,就是只能攻击它的左下方,说白了就是横纵坐标都不大于它的点(mx:“我的战壕为什么这么菜”ToT).这样,永恒就可以从别的地方进攻摧毁战壕,从而消灭mx的部队. 战壕都有一个保护范围,同它的攻击

A. The Fault in Our Cubes 暴力dfs

http://codeforces.com/gym/101257/problem/A 把它固定在(0,0, 0)到(2, 2, 2)上,每次都暴力dfs检查,不会超时的,因为规定在这个空间上,一不行,就会早早退出. 这样写起来比较好写. #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> #include <

HDU 5690 All X 暴力循环节

分析:暴力找循环节就好了 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <string> #include <stack> #include <vector> #include <map> #include <queue> #inc

Codeforces Round #281 (Div. 2) A. Vasya and Football 暴力

A. Vasya and Football Vasya has started watching football games. He has learned that for some fouls the players receive yellow cards, and for some fouls they receive red cards. A player who receives the second yellow card automatically receives a red