[COCI2021-2022#1] Kamenčići 解题记录

[COCI2021-2022#1] Kamenčići 解题记录


题意简述

一个长度为 N N N 的字符串 S S S,仅由 CP 组成。轮流每次从两端取出一个字符,先取出 K K KC 的失败,求先手必胜还是必败。


题目分析

考虑区间 DP,设 d p l , r , k dp_{l,r,k} dpl,r,k 表示取到还剩区间 [ l , r ] [l,r] [l,r],当前轮到的人已经取了 k k kC,当前状态是必胜还是必败。
因为只剩一个石子的状态是确定的,所以区间从少往多转移,即区间 [ l , r ] [l,r] [l,r] 从区间 [ l + 1 , r ] [l+1,r] [l+1,r] [ l , r − 1 ] [l,r-1] [l,r1] 转移。
下一个取得的数量 t t t 怎么求?
假设我们取到了 [ l , r ] [l,r] [l,r],并且当前有 k k kC 被取了,那么 t t t 就是区间 [ l − 1 , r + 1 ] [l-1,r+1] [l1,r+1]C 的数量减去现在的 k k k,用前缀和维护。
由于相邻的两个状态相反,所以转移的时候需要取反。
状态转移方程:
d p l , r , k = ¬ d p l + 1 , r , t ∨ ¬ d p l , r − 1 , t dp_{l,r,k}=\lnot \ dp_{l+1,r,t} \vee \lnot \ dp_{l,r-1,t} dpl,r,k=¬ dpl+1,r,t¬ dpl,r1,t


AC Code
#include<bits/stdc++.h>
#define arrout(a,n) rep(i,1,n)std::cout<<a[i]<<" "
#define arrin(a,n) rep(i,1,n)std::cin>>a[i]
#define rep(i,x,n) for(int i=x;i<=n;i++)
#define dep(i,x,n) for(int i=x;i>=n;i--)
#define erg(i,x) for(int i=head[x];i;i=e[i].nex)
#define dbg(x) std::cout<<#x<<":"<<x<<" "
#define mem(a,x) memset(a,x,sizeof a)
#define all(x) x.begin(),x.end()
#define arrall(a,n) a+1,a+1+n
#define PII std::pair<int,int>
#define m_p std::make_pair
#define u_b upper_bound
#define l_b lower_bound
#define p_b push_back
#define CD const double
#define CI const int
#define int long long
#define il inline
#define ss second
#define ff first
#define itn int
CI N=355;
int32_t n,K,dp[N][N][N/2],sum1[N],sum2[N];
std::string s;
int dfs(int l,int r,int k){if(dp[l][r][k]!=-1){return dp[l][r][k];}if(k>=K){return 0;}int t=sum1[l-1]+sum2[r+1]-k;if(t>=K){return 1;}int ans=(!dfs(l+1,r,t)|!dfs(l,r-1,t));return dp[l][r][k]=ans;
}
signed main() {std::cin>>n>>K>>s;s=" "+s;mem(dp,-1);rep(i,1,n){sum1[i]=sum1[i-1]+(s[i]=='C');}dep(i,n,1){sum2[i]=sum2[i+1]+(s[i]=='C');}if(dfs(1,n,0)){puts("DA");}else{puts("NE");}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/747564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 类型转换 未解决

类型转换 类型转换 类型转换是将一个数据类型的值转换为另一种数据类型的值。 C 中有四种类型转换&#xff1a;静态转换、动态转换、常量转换和重新解释转换。 静态转换&#xff08;Static Cast&#xff09; 静态转换是将一种数据类型的值强制转换为另一种数据类型的值。 静态…

用 docker 创建 jmeter 容器, 实现性能测试,该如何下手?

用 docker 创建 jmeter 容器, 实现性能测试 我们都知道&#xff0c;jmeter可以做接口测试&#xff0c;也可以用于性能测试&#xff0c;现在企业中性能测试也大多使用jmeter。docker是最近这些年流行起来的容器部署工具&#xff0c;可以创建一个容器&#xff0c;然后把项目放到…

如何规划面向未来的架构?

未来是指未来的业务&#xff0c;稳定性&#xff0c;成本 未来系统爆发的增长&#xff0c;这就是规划未来架构的目的 从两个方面入手&#xff1a;1.容量规划 2.底层架构 容量规划&#xff1a; 摸清家底&#xff1a; 各个模块日常应用水位以及历史峰值 99.9%压测 得出QPS vs RT …

Navicat破解 Navicat下载安装 附教程 免费

百度网盘&#xff1a;https://pan.baidu.com/s/1wRRN_18_uXxPiIWCS4l43A 麻烦各位师傅帮忙填写一下问卷&#xff0c;提取码在问卷填写结束后显示~ 【https://www.wjx.cn/vm/mBBTTKm.aspx# 】 &#xff08;资料来源于网络&#xff0c;侵告删&#xff09;

【护网资料】 应急响应 安全设备 告警分析 蓝中必看 HVV 护网行动

百度网盘&#xff1a;https://pan.baidu.com/s/1wDVamgkyXwP-yiWN4jPEGQ 麻烦各位师傅帮忙填写一下问卷&#xff0c;提取码在问卷填写结束后显示~ 【https://www.wjx.cn/vm/mBBTTKm.aspx# 】 &#xff08;资料来源于网络&#xff0c;侵告删&#xff09;

Linux 网络相关测试指令

1、连接网络后ping不通外网 1>ping不通外网IP,例如14.119.104.189 (www.baidu.com) route指令查看是否配置网关 添加网关 route add default gw 192.168.1.1 2>能ping通IP,但ping不通域名 添加DNS配置 /etc/resolv.conf 2、iptables NAT转换 ifconfig usb0 192.1…

【CTF笔记】 CTF web方向笔记分享 免费 附预览图

个人不怎么记东西&#xff0c;笔记不多&#xff0c;师傅们凑合看… 百度网盘&#xff1a;https://pan.baidu.com/s/1PspihUX28Y_AOQZPurHqKA 麻烦各位师傅帮忙填写一下问卷&#xff0c;提取码在问卷填写结束后显示~ 【https://www.wjx.cn/vm/mBBTTKm.aspx# 】 &#xff08;…

重学SpringBoot3-路径匹配机制

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-路径匹配机制 AntPathMatcherPathPatternParser 和 PathPattern演示AntPathMatcher 示例PathPattern 示例性能和精确度的提升 选择使用哪一种 在 Spring…

现代 Android 开发的第一步Kotlin

Kotlin 入门教程&#xff1a;现代 Android 开发的第一步 引言 Kotlin&#xff0c;这门由 JetBrains 团队开发的现代编程语言&#xff0c;自 2011 年诞生以来&#xff0c;以其简洁、安全、实用的特性&#xff0c;迅速在 Android 开发社区中获得了广泛的认可。2017 年&#xff…

迷宫问题三种种解法(A*算法+BFS+双向广搜)

题目描述 小明置身于一个迷宫&#xff0c;请你帮小明找出从起点到终点的最短路程。 小明只能向上下左右四个方向移动。 输入格式 输入包含多组测试数据。输入的第一行是一个整数T&#xff0c;表示有T组测试数据。 每组输入的第一行是两个整数N和M&#xff08;1<N,M<100&a…

【LeetCode】升级打怪之路 Day 24:回溯算法的解题框架

今日题目&#xff1a; 46. 全排列51. N 皇后78. 子集 目录 LC 46. 全排列LC 51. N 皇后LC 78. 子集 【classic】1&#xff09;思路一2&#xff09;思路二 今天学习了回溯算法的解题框架&#xff1a;回溯算法解题套路框架 | labuladong 回溯算法的整体框架都是&#xff1a; re…

力扣L11--- 344.反转字符串(JAVA版)-2024年3月15日

1.题目 2.知识点 交换两个变量值的代码 char temps[left];//temp为暂时的变量&#xff0c;left是左指针&#xff0c;将left暂时存储在temp里面s[left]s[right];//将右指针的值赋给左指针s[right]temp;//将temp的值给右指针left;//左指针向左移动right--;//右指针向右移动3.代码…

Nginx高级技术: 地址重写 Rewrite和应用场景

一、rewrite 场景示例说明 1、基于客户端指定 IP 访问跳转 应用场景说明&#xff1a;指定的 IP地址能正常访问192.168.179.10访问正常。 Rewrite配置如下&#xff1a; vim /usr/local/nginx/conf/nginx.conf server { listen 80; server_name www.old.com; …

【嵌入式DIY实例】-最大功率点跟踪 (MPPT) 太阳能充电控制器

最大功率点跟踪 (MPPT) 太阳能充电控制器 文章目录 最大功率点跟踪 (MPPT) 太阳能充电控制器1、应用介绍2、硬件准备3、太阳能充电控制器介绍4、硬件设计5、驱动代码实现1、应用介绍 在这个应用中,我们将使用 Arduino 并结合许多主动-被动电子设备构建我们自己的 MPPT 太阳能…

2024年【广东省安全员C证第四批(专职安全生产管理人员)】考试总结及广东省安全员C证第四批(专职安全生产管理人员)模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 广东省安全员C证第四批&#xff08;专职安全生产管理人员&#xff09;考试总结是安全生产模拟考试一点通总题库中生成的一套广东省安全员C证第四批&#xff08;专职安全生产管理人员&#xff09;模拟试题&#xff0c;…

【ShenYu源码阅读】支持提醒通知设计,来看看开源贡献者都做了什么

相信大家碰到源码时经常无从下手&#x1f643;&#xff0c;不知道从哪开始阅读&#xff0c;面对大量代码晕头转向&#xff0c;索性就读不下去了&#xff0c;又浪费了一次提升自己的机会&#x1f62d;。 我认为有一种方法&#xff0c;可以解决大家的困扰&#xff01;那就是通过阅…

修复ElementUI中el-select与el-option无法通过v-model实现数据双向绑定的问题

1. 问题描述 需求&#xff1a;在使用ElementUI时&#xff0c;通过el-select和el-option标签实现下拉列表功能&#xff0c;当el-option中的选项被选中时&#xff0c;被选中的选项可以正确回显到已选择的列表中。 对于上面的下拉列表&#xff0c;当我们选中“超级管理员”的选项…

跨境电商应该用什么样的服务器?多大带宽?

跨境电商在选择服务器 和带宽时&#xff0c;需要考虑多个因素&#xff0c;包括业务规模、用户数量、网站流量、地理位置等。下面是一些关键考虑因素&#xff1a; 1、服务器类型 跨境电商通常会选择使用云服务器&#xff0c;因为云服务器具有灵活性、可扩展性和高可用性。云服务…

中国人民银行修订发布《征信投诉办理规程》

近年来&#xff0c;我国征信市场快速发展,征信业务覆盖主体持续增多、征信服务应用场景日益多元&#xff0c;征信权益保护工作面临新形势新任务。为更好地保障信息主体合法权益&#xff0c;推动我国征信业高质量发展&#xff0c;近日&#xff0c;中国人民银行修订发布《征信投诉…

算法训练营day48,动态规划16

package main func max(a, b int) int { if a > b { return a } return b } //647. 回文子串 func countSubstrings(s string) int { n : len(s) dp : make([][]bool, n) for i : 0; i < n; i { dp[i] make([]bool, n) } num : 0 for i : n - 1; i > 0; i-- { for…