hdu 5583(贪心)
来源:互联网 发布:算法公倍数怎么求 编辑:程序博客网 时间:2024/06/09 16:15
分析:算出每一段的个数,贪心过去,注意段数为1的情况 和 段的元素和为1的情况
#include <cstdio>#include <bits/stdc++.h>#include <iostream>using namespace std;typedef long long int LL;#define maxn 100050int T , n ;char a[maxn];LL sum[maxn];int scnt;LL s[maxn];LL ans;LL cal(int x,int y ,int z){ if( y == 1 )return (x+y+z)*(x+y+z); return (x+1)*(x+1) + (y-1)*(y-1) + z*z;}LL cal2(int x,int y ,int z){ if( y == 1 )return (x+y+z)*(x+y+z); return x*x + (y-1)*(y-1) + (z+1*z+1);}void deal(){ for(int i = 1 ; i < scnt ; ++i) { if( i + 2 <= scnt ){ ans = max( ans , cal2( sum[i] , sum[i+1] , sum[i+2] ) + s[scnt] - s[i+2] + s[i-1] ); ans = max( ans , cal( sum[i] , sum[i+1] , sum[i+2] ) + s[scnt] - s[i+2] + s[i-1] ); } else { ans = max( ans , cal2( 0 , sum[i] , sum[i+1] ) + s[scnt] - s[i+1] + s[i-1] ); ans = max( ans , cal( sum[i] , sum[i+1] , 0 ) + s[scnt] - s[i+1] + s[i-1] ); } }}int main(){ cin >> T; int cas = 0; while(T--){ scnt = 0; int x = -1, cnt = 1; scanf("%s",a); int len = strlen(a); for(int i = 0 ; i < len ; ){ int temp = a[i]; int cnt = 0; while( a[i] == temp && i < len ){ i++; cnt++; } sum[++scnt] = cnt; } printf("Case #%d: ",++cas); if( scnt == 1 ){ cout << sum[1]*sum[1] << endl; continue; } for(int i = 1 ; i <= scnt ; ++i) s[i] = s[i-1] + sum[i]*sum[i]; ans = s[scnt]; deal(); cout << ans << endl; }}
阅读全文
0 0
- hdu 5583(贪心)
- HDU 贪心
- 【贪心】hdu
- HDU 2111 Saving HDU(贪心)
- HDU 2111贪心--【Saving HDU】
- HDU 2111 Saving HDU (贪心)
- HDU Saving HDU (贪心)
- HDU 2111 Saving HDU【贪心】
- 【HDU 2111】Saving HDU(贪心)
- HDU.2111 Saving HDU(贪心)
- hdu 1257 dp+贪心
- HDU 1257 DP + 贪心
- hdu pie(二分+贪心)
- hdu 2037 贪心
- 【贪心】hdu 2863
- HDU 4023 贪心+博弈
- 【贪心】HDU 4137
- HDU-1009 贪心
- You don't know js
- Spark-机器学习模型持久化
- Haproxy请求量大出现503故障一例
- 无题
- 函数指针的用法
- hdu 5583(贪心)
- Dubbo的使用及原理浅析.
- 倒排索引
- 程序包org.apache.http不存在,解决方式
- spring mvc rest风格的CRUD
- 数学之美--谈谈分词
- java优质博客
- 安卓开发传递对象:当Parcelable序列化对象用Intent传递发生闪屏或者值不对应时
- 数学之美--信息的度量和作用--信息熵,条件熵和交叉熵