P3514 [POI2011] LIZ-Lollipop
题意:给你一个字符串,'T'代表2, 'W'代表1。
我们观察只给1和2这两个值有什么用,如果我们知道
那么我们找到最大的奇数和偶数就行了,先求
点击查看代码
void solve() {
int n, m;
std::cin >> n >> m;
std::string s;
std::cin >> s;
std::vector<int> sum(n + 1);
for (int i = 0; i < n; ++ i) {
sum[i + 1] = sum[i] + (s[i] == 'T' ? 2 : 1);
}
std::vector<int> l(2 * n + 1, n + 1), r(2 * n + 1);
l[sum[n]] = 1; r[sum[n]] = n;
for (int i = 1; i <= n; ++ i) {
if (sum[i] & 1) {
l[sum[n] - sum[i]] = i + 1;
r[sum[n] - sum[i]] = n;
break;
}
}
for (int i = n; i >= 1; -- i) {
if ((sum[n] - sum[i - 1]) & 1) {
l[sum[i - 1]] = 1;
r[sum[i - 1]] = i - 1;
}
}
for (int i = 2 * n; i >= 2; -- i) {
if (l[i] <= r[i]) {
if (s[l[i] - 1] == 'T') {
l[i - 2] = l[i] + 1;
r[i - 2] = r[i];
} else if (s[r[i] - 1] == 'T') {
l[i - 2] = l[i];
r[i - 2] = r[i] - 1;
} else {
l[i - 2] = l[i] + 1;
r[i - 2] = r[i] - 1;
}
}
}
while (m -- ) {
int x;
std::cin >> x;
if (x <= 2 * n && l[x] <= r[x]) {
std::cout << l[x] << " " << r[x] << "\n";
} else {
std::cout << "NIE\n";
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具