zoukankan      html  css  js  c++  java
  • [HDOJ5583]Kingdom of Black and White(暴力)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5583

    一个01串,求修改一个位置,使得所有数均为0或1的子串长度的平方和最大。先分块,然后统计好原来的结果,每次更新块,更新最大值。

     1 #include <algorithm>
     2 #include <iostream>
     3 #include <iomanip>
     4 #include <cstring>
     5 #include <climits>
     6 #include <complex>
     7 #include <fstream>
     8 #include <cassert>
     9 #include <cstdio>
    10 #include <bitset>
    11 #include <vector>
    12 #include <deque>
    13 #include <queue>
    14 #include <stack>
    15 #include <ctime>
    16 #include <set>
    17 #include <map>
    18 #include <cmath>
    19 
    20 using namespace std;
    21 
    22 typedef long long ll;
    23 const int maxn = 100010;
    24 int n;
    25 char s[maxn];
    26 ll grid[maxn];
    27 
    28 int main() {
    29     // freopen("in", "r", stdin);
    30     int T;
    31     scanf("%d", &T);
    32     for(int _ = 1; _ <= T; _++) {
    33         scanf("%s", s);
    34         memset(grid, 0, sizeof(grid));
    35         ll cur = 0, ans = 0;
    36         n = 0; grid[n] = 1;
    37         for(int i = 1; s[i]; i++) s[i] == s[i-1] ? grid[n]++ : grid[++n] = 1;
    38         for(int i = 0; i <= n; i++)    cur += grid[i] * grid[i];
    39         if(n == 0) ans = grid[0] * grid[0];
    40         else {
    41             for(int i = 1; i <= n; i++) {
    42                 if(grid[i] == 1) ans = max(cur+2*(grid[i-1]*grid[i+1]+grid[i-1]+grid[i+1]), ans);
    43                 else {
    44                     if(grid[i-1] >= grid[i]) 
    45                         ans = max(cur+2*(grid[i-1]-grid[i]+1), ans);
    46                     else 
    47                         ans = max(cur+2*(grid[i]-grid[i-1]+1), ans);
    48                 }
    49             }
    50         }
    51         printf("Case #%d: %I64d
    ", _, ans);
    52     }
    53     return 0;
    54 }
  • 相关阅读:
    JQuery empty方法和remove方法的区别,使用remove清除之前的文本内容??
    乙_1023 组个最小数 (20分)
    乙_1022 D进制的A+B (20分)
    乙_1021 个位数统计 (15分)
    乙_1020 月饼 (25分)
    乙_1013 数素数 (20分)
    乙_1009 说反话 (20分)
    乙_1008 数组元素循环右移问题 (20分)
    乙_1007 素数对猜想 (20分)
    乙_1005 继续(3n+1)猜想 (25分)
  • 原文地址:https://www.cnblogs.com/kirai/p/5412530.html
Copyright © 2011-2022 走看看