zoukankan      html  css  js  c++  java
  • HDU 5583 Kingdom of Black and White(暴力)

    http://acm.hdu.edu.cn/showproblem.php?pid=5583

    题意:

    给出一个01串,现在对这串进行分组,连续相同的就分为一组,如果该组内有x个数,那么就对答案贡献x*x,现在最多可以修改原串中的一个字符,问答案最大可以为多少。

    思路:
    暴力求解。

    一开始只需要预处理分块,计算出每一分块的个数,然后暴力处理一下即可,需要注意分块数为1的情况,此时左右两边都要合并起来。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 
     7 const int maxn = 1e5+5;
     8 typedef long long ll;
     9 
    10 char s[maxn];
    11 ll a[maxn];
    12 int top;
    13 
    14 int main()
    15 {
    16     //freopen("in.txt","r",stdin);
    17     int T;
    18     int kase = 0;
    19     scanf("%d",&T);
    20     while(T--)
    21     {
    22         memset(a,0,sizeof(a));
    23         scanf("%s",s);
    24         int len = strlen(s);
    25         ll cnt = 0;
    26         top = 0;
    27         ll tmp = 0;
    28         for(int i=0;i<len;i++)
    29         {
    30             if(i==0 || s[i]==s[i-1])  cnt++;
    31             else
    32             {
    33                 a[++top]=cnt;
    34                 tmp+=cnt*cnt;
    35                 cnt = 1;
    36             }
    37             if(i==len-1)
    38             {
    39                 a[++top]=cnt;
    40                 tmp+=cnt*cnt;
    41             }
    42         }
    43         ll ans = 0;
    44         for(int i=1;i<=top;i++)
    45         {
    46             ll tt = tmp;
    47             if(i!=1)
    48             {
    49                 tt=tt-a[i]*a[i]-a[i-1]*a[i-1];
    50                 if(a[i]==1)
    51                 {
    52                     tt-=a[i+1]*a[i+1];
    53                     tt+=(a[i-1]+a[i]+a[i+1])*(a[i-1]+a[i]+a[i+1]);
    54                 }
    55                 else
    56                 {
    57                     tt+=(a[i-1]+1)*(a[i-1]+1)+(a[i]-1)*(a[i]-1);
    58                 }
    59                 ans=max(ans,tt);
    60             }
    61             tt = tmp;
    62             if(i!=top)
    63             {
    64                 tt=tt-a[i]*a[i]-a[i+1]*a[i+1];
    65                 if(a[i]==1)
    66                 {
    67                     tt-=a[i-1]*a[i-1];
    68                     tt+=(a[i-1]+a[i]+a[i+1])*(a[i-1]+a[i]+a[i+1]);
    69                 }
    70                 else
    71                 {
    72                     tt+=(a[i]-1)*(a[i]-1)+(a[i+1]+1)*(a[i+1]+1);
    73                 }
    74                 ans=max(ans,tt);
    75             }
    76         }
    77         if(top==1)  ans=a[1]*a[1];
    78         printf("Case #%d: ",++kase);
    79         cout<<ans<<endl;
    80     }
    81     return 0;
    82 }
  • 相关阅读:
    DRF (Django REST framework) 框架介绍(2)
    DRF (Django REST framework) 框架介绍(1)
    Django中的Admin站点
    Django中的模板和表单
    Django数据库
    跨站请求伪造CSRF以及Flask中的解决办法
    Flask中的模板,Jinjia2介绍
    Flask中的上下文和flask-script扩展
    化学品撮合交易系统
    化学品产品查询系统解决方案
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/7837936.html
Copyright © 2011-2022 走看看