icpc:problems:luogup1203
problems | |
---|---|
名称 | Broken Necklace |
题目编号 | P1203 |
题目链接 | luogu.com.cn/… |
来源 | Luogu |
算法分类 | 动态规划, 模拟 |
难易程度 | 容易 |
Broken Necklace
想法
方法1:
需要单独处理'w',当'w'出现统计w的个数,并记录w块之前的颜色,当w块结束时,前后比较,查看数量是否继承。
方法2:
建立4个状态, lr[i]
为 r
颜色往左延伸的长度,其余同理。最终答案取 max(lr[i], lb[i]) + max(rr[i+1], rb[i+1])
代码实现
方法1:
#include<cstdio> #include<cstring> char str[710]; int pre[710], back[710]; int main() { int n, mx = 0; scanf("%d\n", &n); scanf("%s", str); for(int i = 0; i < n; i++) str[i+n] = str[i]; n *= 2; char w = 'w'; int wc = 0; pre[0] = 1; back[n-1] = 1; for (int i = 1; i < n; ++i) { if(str[i] == str[i-1] || str[i] == 'w') pre[i] = pre[i-1] + 1; else if(str[i-1] == 'w') pre[i] = 1 + (w == str[i] ? pre[i-1] : wc); else pre[i] = 1; if(str[i] == 'w') wc++; else wc = 0, w = str[i]; } w = 'w'; wc = 0; for (int i = n-2; i >= 0; --i) { if(str[i] == str[i+1] || str[i] == 'w') back[i] = back[i+1] + 1; else if(str[i+1] == 'w') back[i] = 1 + (w == str[i] ? back[i+1] : wc); else back[i] = 1; if(str[i] == 'w') wc++; else wc = 0, w = str[i]; } for(int i = 0; i < n-1; i++) if(mx < pre[i] + back[i+1]) mx = pre[i] + back[i+1]; printf("%d", mx > n/2 ? n/2 : mx); return 0; }
方法2:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 710; char str[N]; int lr[N], lb[N], rr[N], rb[N]; int main() { int n; scanf("%d\n%s", &n, str); for (int i = 0; i < n; ++i) str[i+n] = str[i]; n *= 2; if(str[0] == 'r') lr[0] = 1; else lb[0] = 1; for (int i = 1; i < n; ++i) { if(str[i] == 'w') { lr[i] = lr[i-1] + 1; lb[i] = lb[i-1] + 1; } else if(str[i] == 'b') lb[i] = lb[i-1] + 1; else lr[i] = lr[i-1] + 1; } if(str[n-1] == 'r') rr[n-1] = 1; else rb[n-1] = 1; for (int i = n-2; i >= 0; --i) { if(str[i] == 'w') { rr[i] = rr[i+1] + 1; rb[i] = rb[i+1] + 1; } else if(str[i] == 'b') rb[i] = rb[i+1] + 1; else rr[i] = rr[i+1] + 1; } int ans = 0; for (int i = 0; i < n-1; ++i) { ans = max(ans, max(lr[i], lb[i]) + max(rr[i+1], rb[i+1])); } if(ans > n/2) ans = n/2; printf("%d", ans); return 0; }
/app/www/public/data/pages/icpc/problems/luogup1203.txt · 最后更改: 2024/03/17 13:36 由 温婕莺