NOI 2016 D1T1 优秀的拆分(80分)

来源:互联网 发布:淘宝一千零一夜演员表 编辑:程序博客网 时间:2024/05/03 08:33

【分析】
论一个只会暴力的人的痛苦
复杂度O(n^3),在洛谷上测一下可以过80分(特判懒得写,加上就90了…)
g[i][j] 表示i到j之间能否构成“AA”的形式,暴力就可以出来
然后枚举子序列长度,起点位置,以及断点位置与起点的长度,就能找出“AABB”中A与B接壤的位置,然后左边右边都判断一下


【代码】

//NOI 2016 D1T1 优秀的拆分#include<iostream>#include<cstdio>#include<cstring>#define fo(i,j,k) for(i=j;i<=k;i++)#define M(a) memset(a,0,sizeof a)using namespace std;bool g[2001][2001],f[2001][2001];char c[2001];inline bool judge(int s,int l)  //判断哦 {    int i;    fo(i,s,s+l-1)      if(c[i]!=c[i+l]) break;    if(i<s+l) return 0;    return 1;}int main(){    int t,i,j,k,l;    scanf("%d",&t);    while(t--)    {        int ans=0;        scanf("%s",c);        M(g);        int len=strlen(c)-1;        fo(i,0,len)          fo(l,1,(len-i+1)>>1)            if(judge(i,l))              g[i][i+2*l-1]=1;        for(l=4;l<=len+1;l+=2)          fo(i,0,len-l+1)            for(k=2;k<=l-2;k+=2)              if(g[i][i+k-1] && g[i+k][i+l-1])                ans++;        printf("%d\n",ans);    }    return 0;}//4//aabbbb//cccccc//aabaabaabaa//bbaabaababaaba
3 0
原创粉丝点击