标签:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5583
题目描述:
2 000011 0101
Case #1: 26 Case #2: 10
#include<set>
#include<map>
#include<list>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<cstdio>
#include<stdlib.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
#define pb(a) push_back(a)
#define mp(a,b) make_pair(a,b)
#define in(a) scanf("%d",&a)
#define mm(a,b) memset(a,b,sizeof(a))
#define out(a) printf("%d")
#define MOD =1e9+7
#define ll long long
#define INF 0x3f3f3f3f
#define FOR(i,l,r) for(int i=l;i<=r;i++)
char s[100005];
int n,cnt;
long long sum,Max;
long long num[100005];
int main(){
int t;
scanf("%d",&t);
for(int cas=1;cas<=t;cas++){
scanf("%s",s);
n=strlen(s);
cnt=0;
int i=0,j=0;
while(i<=j&&j<n){
while(j<n&&s[j]==s[i])j++;
num[cnt++]=j-i;
i=j;
}
sum=0,Max=0;
for( i=0;i<cnt;i++)
sum+=num[i]*num[i];
for(i=1;i<cnt-1;i++){
if(num[i]==1){
long long NEW = (num[i-1]+num[i+1]+1)*(num[i-1]+num[i+1]+1);
long long OLD = num[i-1]*num[i-1]+1+num[i+1]*num[i+1];
if(NEW>OLD){
Max = max(Max,NEW - OLD);
}
}
}
for(int i=0;i<cnt-1;i++){
long long NEW = (num[i]+1)*(num[i]+1)+(num[i+1]-1)*(num[i+1]-1);
long long OLD = num[i]*num[i]+(num[i+1])*(num[i+1]);
if(NEW>OLD){
Max=max(Max,NEW-OLD);
}
}
sum+=Max;
printf("Case #%d: %I64d\n",cas,sum);
}
return 0;
}
字符串-hdu_5583_Kingdom of Black and White
标签:
原文地址:http://blog.csdn.net/qq_31917799/article/details/51285365