日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

HDU5583 上海赛铜牌题

發布時間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU5583 上海赛铜牌题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  這道題的意思是給你一個01串, 定義這串的優美值為連續相同的數字的平方和, 現在可以改變這些串中一個字符, 問你優美值最大是多少? 我們可以預處理出d1[i]i左邊和str[i]相同的字符個數, d2[i]i右邊和str[i]相同的字符個數, 對于一個i, 我們可以進行如下分類, i周圍的兩個元素和i都不相同, 有一個相同, 兩個都相同, 按照這個規律掃一遍即可得出答案, 代碼如下:

#include <bits/stdc++.h>using namespace std;
typedef long long LL;
char str[100000 + 100];
int d1[100000+100], d2[100000 + 100];LL n2(LL a)
{return a*a;
}int main()
{int T;scanf("%d", &T);int kase = 0;while(T--){scanf("%s", str+1);int len = strlen(str+1);memset(d1, 0, sizeof(d1));memset(d2, 0, sizeof(d2));LL res = 0;for(int i=1; i<=len; i++){if(i>1 && str[i]!=str[i-1]){res += (LL)d1[i-1]*(LL)d1[i-1];d1[i] = 1;}else d1[i] = d1[i-1]+1;}res += (LL)d1[len]*(LL)d1[len];for(int i=len; i>=1; i--){if(i<len && str[i]!=str[i+1])d2[i] = 1;else d2[i] = d2[i+1] + 1;}LL ans;LL ansres = res;str[0]='3', str[len+1]='3';for(int i=1; i<=len; i++){if(str[i]==str[i+1] && str[i]==str[i-1]){ans = res-n2(d1[i]+d2[i]-1)+n2(d1[i]-1)+n2(d2[i]-1)+1;ansres = max(ansres, ans);}if(str[i]==str[i+1] && str[i]!=str[i-1]){ans = res-n2(d2[i])-n2(d1[i-1])+n2(d1[i-1]+1)+n2(d2[i]-1);ansres = max(ansres, ans);}if(str[i]!=str[i+1] && str[i]==str[i-1]){ans = res-n2(d1[i])-n2(d2[i+1])+n2(d1[i]-1)+n2(d2[i+1]+1);ansres = max(ansres, ans);}if(str[i]!=str[i-1] && str[i]!=str[i+1]){ans = res-n2(d1[i-1])-n2(d2[i+1])-1+n2(d1[i-1]+d2[i+1]+1);ansres = max(ansres, ans);}}printf("Case #%d: %lld\n", ++kase, ansres);}return 0;
}

?

轉載于:https://www.cnblogs.com/xingxing1024/p/5264741.html

總結

以上是生活随笔為你收集整理的HDU5583 上海赛铜牌题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。