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} ...
 
随机推荐
- Java数据类型及对应取值范围
			
Java数据类型及对应取值范围 在Java中,数据类型分为两大种:基本数据类型(值类型)和包装类型(引用数据类型).基本数据类型不是对象,不能调用toString().hashCode().getCl ...
 - LUA解析json小demo
			
需要修改的json数据gui-config.json { "configs": [{ "server": "JP3.ISS.TF", &qu ...
 - Spring框架学习笔记(9)——API接口设计相关知识及具体编码实现
			
最近需要设计一个API服务器,想要把API接口搞得规范一下,就通过网上搜集到了一些资料,以下便是自己的一些理解以及相关的具体实现 本文采用的是spring boot+maven的方案 restful规 ...
 - 使用logstash结合logback收集微服务日志
			
因为公司开发环境没有装elk,所以每次查看各个微服务的日志只能使用如下命令 这样子访问日志是并不方便,于是想为每个微服务的日志都用logstash收集到一个文件out中,那以后只要输出这个文件则可查看 ...
 - Java并发编程-扩展可回调的Future
			
前提 最近在看JUC线程池java.util.concurrent.ThreadPoolExecutor的源码实现,其中了解到java.util.concurrent.Future的实现原理.从目前j ...
 - 你应该了解的 Java SPI 机制
			
前言 不知大家现在有没有去公司复工,我已经在家办公将近 3 周了,同时也在家呆了一个多月:还好工作并没有受到任何影响,我个人一直觉得远程工作和 IT 行业是非常契合的,这段时间的工作效率甚至比在办公室 ...
 - 杭电-------2098 分拆素数和(c语言写)
			
#include<stdio.h> #include<math.h> ] = { , }; ;//全局变量,用来标志此时已有多少个素数 int judge(int n) {// ...
 - JavaScript节流与防抖函数封装
			
js节流与防抖函数封装 常见应用场景: window的 resize 和 scroll 事件: 文字输入时的 keyup 事件: 元素拖拽.移动时的 mousemove 事件: 防抖 定义:多次触发事 ...
 - [MongoDB] 使用PHP根据_id字段查询数据
			
mongo中的_id是一个objectid对象类型,不管是查询时作为条件,还是列表时展示内容,都需要进行一下抓换 查询时要转为objectid对象 列表时要把对象转成字符串覆盖回_id字段 $filt ...
 - php面试笔记(6)-php基础知识-正则表达式考点
			
本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 在面试中,考官往往喜欢基础扎实的面试者,而正则表达式相关 ...