[HDOJ5583]Kingdom of Black and White(暴力)
2016-04-20 14:22
197 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5583
一个01串,求修改一个位置,使得所有数均为0或1的子串长度的平方和最大。先分块,然后统计好原来的结果,每次更新块,更新最大值。
一个01串,求修改一个位置,使得所有数均为0或1的子串长度的平方和最大。先分块,然后统计好原来的结果,每次更新块,更新最大值。
#include <algorithm> #include <iostream> #include <iomanip> #include <cstring> #include <climits> #include <complex> #include <fstream> #include <cassert> #include <cstdio> #include <bitset> #include <vector> #include <deque> #include <queue> #include <stack> #include <ctime> #include <set> #include <map> #include <cmath> using namespace std; typedef long long ll; const int maxn = 100010; int n; char s[maxn]; ll grid[maxn]; int main() { // freopen("in", "r", stdin); int T; scanf("%d", &T); for(int _ = 1; _ <= T; _++) { scanf("%s", s); memset(grid, 0, sizeof(grid)); ll cur = 0, ans = 0; n = 0; grid = 1; for(int i = 1; s[i]; i++) s[i] == s[i-1] ? grid ++ : grid[++n] = 1; for(int i = 0; i <= n; i++) cur += grid[i] * grid[i]; if(n == 0) ans = grid[0] * grid[0]; else { for(int i = 1; i <= n; i++) { if(grid[i] == 1) ans = max(cur+2*(grid[i-1]*grid[i+1]+grid[i-1]+grid[i+1]), ans); else { if(grid[i-1] >= grid[i]) ans = max(cur+2*(grid[i-1]-grid[i]+1), ans); else ans = max(cur+2*(grid[i]-grid[i-1]+1), ans); } } } printf("Case #%d: %I64d\n", _, ans); } return 0; }
相关文章推荐
- 前端nginx时,让后端tomcat记录真实IP
- linux驱动中使用顺序锁
- 漫游Kafka设计篇之性能优化
- 全屏分页滚动插件
- AIX6.1 升级OpenSSH(摘自网络)
- scikit-learn中拟合结果的评价指标
- 实用代码块
- Android Studio建立多个项目
- UIView Key-frame Animations
- 安卓自定义圆角Button,继承Button类实现在xml设置圆角半径和背景颜色和点击背景颜色
- 一种改善软件用户界面友好性操作的方法
- SFTP 上传文件报错:SFTP ERROR?Algorithm negotiation fail
- MapReduce 运行机制
- yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
- Spring Boot 之 RESRful API 权限控制
- 漫游Kafka设计篇之消息传输的事务定义
- 漫游Kafka设计篇之数据持久化
- 修改tomcat编码和设置可读写
- EXCEL VBA代码,实现点击Sheet1按钮控件保存不连续单元格的数据到Sheet2中,然后清空输入内容
- 开心的小明