HDU 5583 - Kingdom of Black and White题解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 5583 - Kingdom of Black and White题解相关的知识,希望对你有一定的参考价值。
此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置。
题目链接(vjudge):https://vjudge.net/problem/HDU-5583
题目大意:
输入第一行为一个数字T,表示数据组数(1<=T<=50)。
接下来每一行有一个长度不超过100000的字符串,由0/1组成。
你可以对这个字符串进行一次操作,选择把一个0变成1或者把一个1变成0(也可以不操作).
之后,这个字符串的值就等于字符串中相邻相同的字符串长度的平方和。我们想令这个值最大。
例如000011,选择把第一个1变成0,即000001,字符串的值就是5*5+1*1=26.
输出最大值。
Sample Input
2 000011 0101Sample Output
Case #1: 26 Case #2: 10
分析:
大概就是个模拟,先处理出每个连续串的长度,再枚举修改哪一个数字。
注意参与运算的变量全部要开long long
AC代码:
1 #include<cstdio> 2 #include<algorithm> 3 #include<cmath> 4 #include<cstring> 5 #include<queue> 6 #include<stack> 7 8 inline int Min(int a,int b) 9 {return a<b?a:b;} 10 11 inline long long Max(long long a,long long b) 12 {return a>b?a:b;} 13 14 int t,n,tmp,tot; 15 long long note[100002],ans,mx; 16 char s[100005]; 17 18 void init() 19 { 20 tmp = 1,tot = 0; 21 mx = 0,ans = 0; 22 memset(note,0,sizeof(note)); 23 } 24 25 int main() 26 { 27 // freopen("1.txt","r",stdin); 28 // freopen("stone.in","r",stdin); 29 // freopen("stone.out","w",stdout); 30 scanf("%d",&t); 31 for(int x = 1;x <= t;++ x) 32 { 33 init(); 34 scanf("%s",s); 35 n = strlen(s); 36 for(register int i = 1;i < n;++ i){ 37 if(s[i] == s[i-1]) 38 ++ tmp; 39 else{ 40 note[++ tot] = 1LL*tmp; 41 mx += 1LL*tmp*tmp; 42 tmp = 1; 43 } 44 } 45 note[++ tot] = 1LL*tmp; 46 mx += 1LL*tmp*tmp; 47 ans = mx; 48 for(int i = 1;i < tot;++ i) 49 { 50 if(note[i+1] == 1) 51 ans = Max(ans,1LL*(mx-note[i]*note[i]-note[i+1]*note[i+1]-note[i+2]*note[i+2]+(note[i]+note[i+1]+note[i+2])*(note[i]+note[i+1]+note[i+2]))); 52 else 53 ans = Max(ans,1LL*(mx-note[i]*note[i]-note[i+1]*note[i+1]+(note[i+1]-1)*(note[i+1]-1)+(note[i]+1)*(note[i]+1))); 54 if(note[i] == 1) 55 ans = Max(ans,1LL*(mx-note[i]*note[i]-note[i+1]*note[i+1]-note[i-1]*note[i-1]+(note[i-1]+note[i]+note[i+1])*(note[i-1]+note[i]+note[i+1]))); 56 else 57 ans = Max(ans,1LL*(mx-note[i]*note[i]-note[i+1]*note[i+1]+(note[i]-1)*(note[i]-1)+(note[i+1]+1)*(note[i+1]+1))); 58 } 59 printf("Case #%d: %I64d\n",x,ans); 60 } 61 return 0; 62 }
以上是关于HDU 5583 - Kingdom of Black and White题解的主要内容,如果未能解决你的问题,请参考以下文章
HDU 5583 - Kingdom of Black and White题解
HDU 5583 Kingdom of Black and White(模拟)
hdu 5943 Kingdom of Obsession 二分图匹配+素数定理
hdu5943 Kingdom of Obsession 二分图+打表找规律