暴力水题(思路很重要)HDU5583
2015-12-03 14:43
337 查看
Kingdom of Black and White
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 243 Accepted Submission(s): 98
Problem Description
In the Kingdom of Black and White (KBW), there are two kinds of frogs: black frog and white frog.
Now N frogs
are standing in a line, some of them are black, the others are white. The total strength of those frogs are calculated by dividing the line into minimum parts, each part should still be continuous, and can only contain one kind of frog. Then the strength is
the sum of the squared length for each part.
However, an old, evil witch comes, and tells the frogs that she will change the color of at most one frog and thus the strength of those frogs might change.
The frogs wonder the maximum possible strength after the witch finishes her job.
Input
First line contains an integer T,
which indicates the number of test cases.
Every test case only contains a string with length N,
including only 0 (representing
a black frog) and 1 (representing
a white frog).
⋅ 1≤T≤50.
⋅ for
60% data, 1≤N≤1000.
⋅ for
100% data, 1≤N≤105.
⋅ the
string only contains 0 and 1.
Output
For every test case, you should output "Case #x: y",where x indicates
the case number and counts from 1 and y is
the answer.
Sample Input
2 000011 0101
Sample Output
Case #1: 26 Case #2: 10
Source
2015ACM/ICPC亚洲区上海站-重现赛(感谢华东理工)
#include<stdio.h> #include<string.h> long long max(long long a,long long b) { if(a<b) return b; else return a; } int main() { long long test; int sb=1; scanf("%I64d",&test); while(test--) { char a[100005]; long long map[100005]; memset(map,0,sizeof(map)); scanf("%s",a); long long la=strlen(a); long long count=0; long long res=0; for(long long i=0; i<la;) { long long j=i; while(j<la&&a[i]==a[j]) j++; map[count]=j-i; res+=map[count]*map[count]; count++; i=j; } // prlong longf("count:%I64d\n",count); // for(long long i=0; i<count; i++) // prlong longf("%I64d\n",map[i]); if(count==1) { printf("Case #%d: %I64d\n",sb++,res); continue; } long long ans=res; for(long long i=0; i<count; i++)//当长度为1是会对左右都产生影响,不为1则没有影响 { long long t=res; if(map[i]==1) { long long now=map[i]; t-=map[i]*map[i]; if(i<count-1) { now+=map[i+1]; t-=map[i+1]*map[i+1]; } if(i) { now+=map[i-1]; t-=map[i-1]*map[i-1]; } t+=now*now; ans=max(ans,t); } else { if(i<count-1) { long long temp=res; temp-=map[i]*map[i]; temp-=(map[i+1])*(map[i+1]); temp+=(map[i+1]+1)*(map[i+1]+1); temp+=(map[i]-1)*(map[i]-1); ans=max(ans,temp); } if(i) { long long temp=res; temp-=map[i]*map[i]; temp-=(map[i-1])*(map[i-1]); temp+=(map[i-1]+1)*(map[i-1]+1); temp+=(map[i]-1)*(map[i]-1); ans=max(ans,temp); } } } printf("Case #%d: %I64d\n",sb++,ans); } }
相关文章推荐
- java并发编程的转载博客专题
- REST: C#调用REST API (zz)
- Java指令集
- hobt_id 和 partition_ID 理解
- 【转】android新组件RecyclerView使用介绍和进阶使用,替用Gallery
- [推荐] - 业余网站
- ORA-12514:TNS:listener does not currently know of service requested in connect descriptor
- JMeter学习(四)参数化
- acm 2037 水题一个 注意细节- - 然后 没有然后了
- 用jconsole可视化JVM的运行状态
- 【Android实战】RecyclerView实现水平可滚动gridview
- unity3d利用sharesdk分享内容至微信、新浪微博、qq空间等国内主流社交平台(ios篇)
- 微信应用放在tomcat上正常,放到weblogic上回调失败
- socket通信
- Android GC 那点事
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
- java实现base64字符串转换png图片
- light oj 1008 - Fibsieve`s Fantabulous Birthday
- [Android实例] Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
- 练手小程序(五)