Wannafly Winter Camp 2020 Day 6C 酒馆战棋 - 贪心
你方有 \(n\) 个人,攻击力和血量都是 \(1\)。对方有 \(a\) 个普通人, \(b\) 个只有盾的,\(c\) 个只有嘲讽的,\(d\) 个有盾又有嘲讽的,他们的攻击力和血量都是无穷大。有盾的可以抵挡一次攻击,有嘲讽的必须先被杀掉,才能杀没有嘲讽的。
你方的 \(n\) 个人排成一排,从左向右依次出击,你知道它们每个是否有剧毒属性(即攻击力为无穷大)。
每次出击选定的对方是被色子控制的。问你能打败多少个对方人,求最大值和最小值。
数据组数 \(\leq 100\),所有数据 \(\leq 1000\)
Solution
考虑暴力模拟题意,开四个计数器记录四类对手分别剩下几个,然后从左到右读取己方序列,按规则选取攻击对象。在任何情况下,我们可以把有嘲讽的和没有嘲讽的分开处理。先处理有嘲讽的,等到有嘲讽的处理完毕以后再去处理没有嘲讽的。在接下来的讨论中,我们忽略嘲讽这一属性。
容易发现,己方的剧毒者既可以杀盾,也可以杀人;而己方的普通人只能杀盾。
如果要使得答案最大
- 如果这一次派出的是普通人,就让它杀掉一个盾,将它转化为一个普通人
- 如果这一次派出的是剧毒者,看是否还有普通人,如果有就杀人,否则就杀盾
如果要使得答案最小
- 如果这一次派出的是普通人,若还有普通人,什么也不做,否则去破盾(一开始想成这里直接什么也不做了)
- 如果这一次派出的是剧毒者,看是否还有盾,如果有就杀掉一个盾,否则才杀人
#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
int n,a,b,c,d;
char s[N];
int solve1(int a,int b,int c,int d) {
int ans=0;
for(int i=1;i<=n;i++) {
if(c+d>0) {
if(s[i]=='0') {
if(d>0) --d,++c;
}
else {
if(c>0) --c,++ans;
else if(d>0) --d,++c;
}
}
else {
if(s[i]=='0') {
if(b>0) --b,++a;
}
else {
if(a>0) --a,++ans;
else if(b>0) --b,++a;
}
}
}
return ans;
}
int solve2(int a,int b,int c,int d) {
int ans=0;
for(int i=1;i<=n;i++) {
if(c+d>0) {
if(s[i]=='1') {
if(d>0) --d,++c;
else if(c>0) --c,++ans;
}
else {
if(c==0) if(d>0) --d,++c;
}
}
else {
if(s[i]=='1') {
if(b>0) --b,++a;
else if(a>0) --a,++ans;
}
else {
if(a==0) if(b>0) --b,++a;
}
}
}
return ans;
}
signed main() {
int t;
cin>>t;
while(t--) {
cin>>n>>a>>b>>c>>d>>s+1;
cout<<solve1(a,b,c,d)<<" "<<solve2(a,b,c,d)<<endl;
}
}
Wannafly Winter Camp 2020 Day 6C 酒馆战棋 - 贪心的更多相关文章
- Wannafly Winter Camp 2020 Day 7E 上升下降子序列 - 数学
神奇公式 #include <bits/stdc++.h> using namespace std; #define int long long int n,mod,c[205][205] ...
- Wannafly Winter Camp 2020 Day 7D 方阵的行列式 - 数学
于是去弄了个板子来 #include <bits/stdc++.h> using namespace std; #define int long long const int mod = ...
- Wannafly Winter Camp 2020 Day 7A 序列 - 树状数组
给定一个全排列,对于它的每一个子序列 \(s[1..p]\),对于每一个 \(i \in [1,p-1]\),给 \(s[i],s[i+1]\) 间的每一个值对应的桶 \(+1\),求最终每个桶的值. ...
- Wannafly Winter Camp 2020 Day 6J K重排列 - dp
求 \(K\) 是多少个 \(n\) 元置换的周期.\(T\leq 100, n\leq 50, K \leq 10^{18}\) Solution 置换可以被试做若干个环组成的有向图,于是考虑 dp ...
- Wannafly Winter Camp 2020 Day 6I 变大! - dp
给定一个序列,可以执行 \(k\) 次操作,每次选择连续的三个位置,将他们都变成他们的最大值,最大化 \(\sum a_i\) 需要对每一个 \(k=i\) 输出答案 \(n \leq 50, a_i ...
- Wannafly Winter Camp 2020 Day 6H 异或询问 - 二分
给定一个长 \(n\) 的序列 \(a_1,\dots,a_n\),定义 \(f(x)\) 为有多少个 \(a_i \leq x\) 有 \(q\) 次询问,每次给定 \(l,r,x\),求 \(\s ...
- Wannafly Winter Camp 2020 Day 6G 单调栈 - 贪心
对于排列 \(p\),它的单调栈 \(f\) 定义为,\(f_i\) 是以 \(p_i\) 结尾的最长上升子序列的长度 先给定 \(f\) 中一些位置的值,求字典序最小的 \(p\) 使得它满足这些值 ...
- Wannafly Winter Camp 2020 Day 6D 递增递增 - dp,组合数学
给定两个常为 \(n\) 的序列 \(l_i,r_i\),问夹在它们之间 ( \(\forall i, l_i \leq a_i \leq r_i\) ) 的不降序列的元素总和. Solution 先 ...
- Wannafly Winter Camp 2020 Day 6A Convolution - NTT
求 \(\sum_{i=1}^n \sum_{j=1}^n 2^{a_ia_j}\) Solution 化简一下 \[ 2^{a_ia_j} = p^{(a_i+a_j)^2-a_i^2-a_j^2} ...
随机推荐
- 练习2-13 求N分之一序列前N项和 (15 分)
练习2-13 求N分之一序列前N项和 (15 分) 输入在一行中给出一个正整数N. 输出格式: 在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位.题目保证计算结果不超过双精度范 ...
- 文件传输基础----Java IO流
编码问题 一个很著名的奇怪现象:当你在 windows 的记事本里新建一个文件,输入"联通"两个字之后,保存,关闭,然后再次打开,你会发现这两个字已经消失了,代之的是几个乱码!呵呵 ...
- Centos 下设置静态ip地址
今天小编遇到了需要设置centos(6.4) 下静态ip地址,下面把详细步骤记录下来. 1> 首先打开这个 vi /etc/sysconfig/network-scripts/ifcfg- ...
- zookeeper从入门到放弃
第1章 Zookeeper入门 1.1 概述 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目. 1.2 特点 1.3 数据结构 1.4 应用场景 提供的服务包括:统 ...
- pos 访问超时 windows连接超时 497 天后未关闭 TIME_WAIT
问题描述: nginx连接后台tomcat程序 一直报错 nginx的error日志如下 // :: [error] #: *: A connection attempt failed because ...
- Docker Compose 模板文件 V2
模板文件是使用Compose的核心,默认模板文件名称为docker-compose.yml ,格式为YAML格式. 目录结构 [root@localhost ~]# tree /opt/compose ...
- css中伪类和伪元素
伪类和伪元素时对那些我们不能通过class.id等选择元素的补充 伪类的操作对象是文档树中已有的元素(可以给已有元素加了一个类替代),而伪元素则创建了一个文档数外的元素(可以添加一个新元素替代) CS ...
- StarUML之七、StarUML的Class Diagram(类图)示例
UML 类图中的概念 类图关系:泛化(继承).实现.聚合.组合.关联.依赖 类图的详解可在网上查询(推荐https://zhuanlan.zhihu.com/p/24576502) 它描述了在一个系统 ...
- StarUML之四、StarUML的Diagrams(图)与Elements(元素)及相关属性
Diagrams(图)可以理解为画布 1:创建图 在右侧的Model Explorer管理界面的第一个节点右键,或者选择菜单中Model | Add Diagram | [DiagramType]都 ...
- HTML连载69-透视属性以及其他属性练习
一.透视属性 1.什么是透视 透视简单来说就是近大远小 2.注意点:一定要注意,透视属性必须添加到需要呈现近大远小效果的元素的父元素. 3.格式:perspective:数字px; 这里的数字代 ...