hdu 5583

来源:互联网 发布:vb中default是什么意思 编辑:程序博客网 时间:2024/06/07 06:06

思路一直是正确的,总是wa

一开始我估计复杂度是n^2 后来提前把和求出来,就变成n了

就可以直接暴力了

后来在hdu discuss发现,原来是数据有问题

代码如下

#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;int main(){int t,cnt=0;scanf("%d",&t);while(t--){cnt++;string s;cin>>s;long long a[100005];memset(a,0,sizeof(a));char temp=s[0];int num=0;for(int i=0;i<s.size();i++){if(s[i]==temp) a[num]++;if(s[i]!=temp) {num++;temp=s[i];a[num]++;} }//for(int i=0;i<=num;i++)//printf("%d ",a[i]);//printf("\n");if(num==0){long long temp=a[0]*a[0];printf("Case #%d: %I64d\n",cnt,temp); continue;}if(num==1){long long temp=(max(a[0],a[1])+1)*(max(a[0],a[1])+1)+(min(a[0],a[1])-1)*(min(a[0],a[1])-1);printf("Case #%d: %I64d\n",cnt,temp); continue;}long long sum=0;for(int i=0;i<=num;i++){sum+=(a[i]*a[i]);} long long ans=0;for(int i=0;i<num;i++){long long res=sum;res-=(a[i]*a[i]+a[i+1]*a[i+1]);res+=(max(a[i],a[i+1])+1)*(max(a[i],a[i+1])+1)+(min(a[i],a[i+1])-1)*(min(a[i],a[i+1])-1);ans=max(ans,res);if(a[i+1]==1&&i+2<=num){res=sum;res-=(a[i]*a[i]+a[i+1]*a[i+1]+a[i+2]*a[i+2]);res+=((a[i]+a[i+2]+1)*(a[i]+a[i+2]+1));ans=max(ans,res);} }printf("Case #%d: %I64d\n",cnt,ans); }}



原创粉丝点击