BZOJ 3916 friends

Posted ziliuziliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ 3916 friends相关的知识,希望对你有一定的参考价值。

暴力。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 2000050
using namespace std;
char s[maxn];
int l;
bool l_match()
{
    int p1=1,p2=l/2+1,ret=0;
    while ((p1<=l/2) && (p2<=l))
    {
        if (s[p1]!=s[p2]) {p2++;ret++;if (ret==2) return false;}
        if (s[p1]==s[p2]) {p1++;p2++;}
    }
    return true;
}
bool r_match()
{
    int p1=1,p2=l/2+2,ret=0;
    while ((p1<=l/2+1) && (p2<=l))
    {
        if (s[p1]!=s[p2]) {p1++;ret++;if (ret==2) return false;}
        if (s[p1]==s[p2]) {p1++;p2++;}
    }
    return true;
}
bool l_r_match()
{
    for (int i=1;i<=l/2;i++)
        if (s[i]!=s[i+l/2+1]) return false;    
    return true;
}
int main()
{
    scanf("%d",&l);
    scanf("%s",s+1);
    if (!(l&1)) {printf("NOT POSSIBLE\n");return 0;}
    bool f1=l_match(),f2=r_match();
    if ((!f1) && (!f2)) printf("NOT POSSIBLE\n");
    else if (f1 && f2)
    {
        if (!l_r_match())
            printf("NOT UNIQUE");
        else
            for (int i=1;i<=l/2;i++)
                printf("%c",s[i]);
        printf("\n");    
    }
    else if (f1)
    {
        for (int i=1;i<=l/2;i++)
                printf("%c",s[i]);
        printf("\n");
    }
    else
    {
        for (int i=l/2+2;i<=l;i++)
                printf("%c",s[i]);
        printf("\n");
    }
    return 0;
}

 

以上是关于BZOJ 3916 friends的主要内容,如果未能解决你的问题,请参考以下文章

[BalticOI 2014]Three Friends 题解

[BalticOI 2014]Three Friends 题解

P3916 图的遍历

P3916 图的遍历 反向建图+DFS

sdut 3916

洛谷 3916 图的遍历