首页 > 其他分享 >2022 CCPC 绵阳站

2022 CCPC 绵阳站

时间:2023-04-07 15:33:43浏览次数:50  
标签:return int CCPC 绵阳 pb pa ret 2022 pick

2022 CCPC Mianyang

CF传送门

简记情况

是就柿火红猕猴果队的第一次训练赛!大概做了三个小时,过了CGH,卡在AM。

C直接做,G直接模拟,H构造。

5题是 银or铜。

A. Ban or Pick, What's the Trick 记忆化搜索/动态规划

Solution

思路

注意到,每次pick 或 ban 都应该选择 己方 or 对方分数最高的英雄。

模拟的时候想的是一个贪心:如果己方分数最高的英雄 > 对方,则 pick,否则 ban。其实也许可以说是一个明显的错误贪心?因为有很多小数据的反例(如下)。

Example 1.
2 1
85 50
19 16
A选了85之后,B选19比禁50更好
Example 2.
3 1
84 53 8
83 29 18
A一开始应该禁83而不是选84,因为A如果禁83,然后无论B选29还是禁84,A最后的答案都会更佳

考虑 dp/记忆化搜索 ,设 \(f[r][pa][pb]\)表示现在到 \(r\) 回合,\(a\) 选了 \(pa\) 个英雄,\(b\) 选了 \(pb\) 个英雄之后的答案。注意它记的不是在前面的 \(r\) 个回合里分别选 \(pa\) 和 \(pb\) 个英雄之后的答案;而是在前 \(r\) 个回合分别选 \(pa\) 和 \(pb\) 的前提下,后面的回合里二者都做最优选择的答案

转移:

无非是从 \(pick\) 和 \(ban\) 这两种情况转移。

若 \(r\) 是 \(a\) 的回合,则 \(f[r][pa][pb]\),可以从 \(f[r+1][pa][pb]\) (选择了 \(ban\))和 \(f[r+1][pa+1][pb]\)(选择了 \(pick\)) 转移。

注意转移条件(具体见代码)。特别说明的是,若 \(a\) 已经 \(pick\) 了 \(k\) 个英雄,那么他直接 \(ban\) 肯定是更优的。

Tips:

注意到 \(k\) 的范围非常小,如果是之前 \(O(n)\) 的贪心策略,则 \(k\) 没必要这样限制范围。由此应该推测复杂度里是带 \(k\) 的,也就是说应该考虑记录与 \(k\) 有关的状态。

Code

#include<iostream>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
const int N = 1e5 + 2, K = 12;
const ll inf = 1e18;
int n, k, a[N], b[N];
ll f[N * 2][K][K];
ll dfs(int r, int pa, int pb) { //round pick_a pick_b
	if (r == 2 * n + 1) return 0;  //边界
	if (f[r][pa][pb] != -1) return f[r][pa][pb];

	int ta = (r - 1) / 2 - pb + pa, tb = r / 2 - pa + pb; //tot_a tot_b

	if (r % 2) {  //现在是a的回合
		ll ret = -inf;
		if (tb < n)  //b还有没被选且没被禁的英雄
			ret = dfs(r + 1, pa, pb);
		if (pa < k && ta < n) //a还有可以选的英雄
			ret = max(ret, dfs(r + 1, pa + 1, pb) + a[ta + 1]);
		return f[r][pa][pb] = ret;
	}
	else {  //现在是b的回合
		ll ret = inf;
		if (ta < n)  //a还有没被选且没被禁的英雄
			ret = dfs(r + 1, pa, pb);
		if (pb < k && tb < n) //a还有可以选的英雄
			ret = min(ret, dfs(r + 1, pa, pb + 1) - b[tb + 1]);
		return f[r][pa][pb] = ret;
	}
}
int main() {
	cin >> n >> k;
	for (int i = 1;i <= n;++i) cin >> a[i];
	for (int i = 1;i <= n;++i) cin >> b[i];
	sort(a + 1, a + n + 1, greater<int>()); //从大到小排序
	sort(b + 1, b + n + 1, greater<int>());
	memset(f, -1, sizeof(f));

	cout << dfs(1, 0, 0) << endl;
	
	return 0;
}

M. Rock-Paper-Scissors Pyramid 栈

Solution1

注意到 :

① ..SSPP...PPS.. 这样的可以直接用一个 ...S... 替换

② PP....S...... 可以替换成 S.....

③ .......S...P 可以替换成 .......S

tutorial 说用一个栈维护,没太get,后续看了别的题解,感觉应该是 Solution2 的实现是一样的!

Solution2

注意到对于 SPRSPR 这样的序列(每个都被左边的打败),答案是 S。

考虑维护一个栈,从栈底到栈顶满足上述条件。如何维护:若当前遍历到 \(c\),则 \(c\) 与栈顶元素比较,如果不被打败,则弹出栈顶,一直到栈空或能打败栈顶。然后将 \(c\) 加入栈。

感觉本质和 Solution1 是一个意思。

Solution3

网上看的一个贪心做法,here ,感觉有点抽象(打败前一个就上一层,最后值最大的也就是最高层的答案)。

image

Code

#include<iostream>
#include<cstring>
using namespace std;
const int N = 1e6 + 5;
string s;
char stack[N];
int top;
bool comp(char x, char y) {
	if (x == 'R' && y == 'S') return 1;
	if (x == 'S' && y == 'P') return 1;
	if (x == 'P' && y == 'R') return 1;
	return 0;
}
int main() {
	int T;
	cin >> T;
	while (T--) {
		cin >> s;
		top = -1;
		int len = s.length();
		for (int i = 0;i < len;++i) {
			int c = s[i];
			while (top >= 0 && comp(c, stack[top])) --top;
			stack[++top] = c;
		}
		cout << stack[0] << endl;
	}
	return 0;
}

标签:return,int,CCPC,绵阳,pb,pa,ret,2022,pick
From: https://www.cnblogs.com/dttttttt/p/17296321.html

相关文章

  • 蓝桥杯历年省赛真题做题记录(A组)(2022年第十三届)
    D题:选数异或考虑到异或的一个很好的性质,$A^B=x$等价于$A^x=B$。用$flag$数组记录一下数字$A[i]$是否出现过,出现过则$flag[A[i]]不等于0$。类似DP中分配任务模型的思想,这样我们只需要对每次$L,R$询问,判断之中有没有这样一对$(l,r)$数对使得$A[l]^A[r]==x$。因此设$d[i]$......
  • Visual Studio 2022 不支持 .NET Framework 4.5 项目的解决办法
    概述升级到VisualStudio 2022后,打开速度快了很多,开发体验也舒服很多。只是使用过程中遇到了一个比较尴尬的问题:默认VisualStudio2022不再支持安装.NETFramework4.5组件,如下图所示:选择组件里面已经不能选择4.5/4.0的框架了。此时如果打开基于.NETFramework4.5......
  • Exp4-恶意代码分析 20202211王宏韬
    目录1.实验后回答问题(1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控。(2)如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。2.实验总结与体会......
  • PDF编辑软件Acrobat DC 2022下载及安装教程
    PDF是我们日常工作学习中的常用的文件格式,有时候需要修改PDF格式,在网上找各种版本的编辑或者查看软件都不好用。下面介绍一款叫Acrobat的软件,它是由Adobe公司开发的一款PDF(PortableDocumentFormat,便携式文档格式)编辑软件。借助它,能够以PDF格式制作和保存文档,以便于浏览和打印,同......
  • Legion Y9000P IAH7H(2022款) 睡眠后黑屏解决方案
    LegionY9000PIAH7H(2022款)安装win10和win11原版系统后,点击开始菜单的“睡眠”按钮后会黑屏,无法开机。需要长按电源彻底关闭电脑才能开机亮屏。在官方找到对应的BIOS程序,升级BIOS即可解决。网上也试过其他方案,都不管用。https://newsupport.lenovo.com.cn/driveDownloads_deta......
  • [2022CCCC天梯赛] L3-1 千手观音(30分)
    [2022CCCC天梯赛]L3-1千手观音(30分)题目描述人类喜欢用10进制,大概是因为人类有一双手10根手指用于计数。于是在千手观音的世界里,数字都是10000进制的,因为每位观音有1000双手……千手观音们的每一根手指都对应一个符号(但是观音世界里的符号太难画了,我们暂且用小写英......
  • 2022全国职业技能大赛-云计算私有云平台搭建及注意事项
    @目录环境准备基础配置搭建yum源修改openrc.sh计算节点分区脚本安装安装平台基本服务环境准备软件包:答题云主机环境;CentOS-7-x86_64-DVD-2009.iso(centos7.9)iaas版本;chinaskills_cloud_iaas_v2.0.3.iso(openstackT版)国赛竞赛方式:1,openstack平台,现场会提供一个IP地址,登录......
  • 【论文速递】ECCV2022 - PETR: Position Embedding Transformation for Multi-View 3D
    【论文原文】:PETR:用于多视图3D对象检测的位置嵌入变换论文:https://arxiv.org/abs/2203.05625代码:https://github.com/megvii-research/PETR博主关键词:小样本学习,语义分割,图注意力网络,互监督,目标检测,三维视觉摘要在本文中,我们开发了用于多视图3D对象检测的位置嵌入变换(PET......
  • 2022-适用于 Windows 10 Version 1809 的 02 累积更新,适合基于 x64 的系统 (KB5010351
    2022-适用于Windows10Version1809的02累积更新,适合基于x64的系统(KB5010351)-错误0x800f0982系统是win10企业版LTSC版本可能安装的是精简版导致的运行疑难解答这个方案无效利用win10更新助手-因为是企业版TLSC版本所以用不了WIN10LTSC版更新失败如何解决?这......
  • 不确定的市场,确定的增长,海尔智家2022全球再逆增
    文|螳螂观察作者|余一上市公司2022年年报逐渐进入密集披露期,在当前的年报季窗口,各家公司的业绩情况被高度关注。3月30日晚,海尔智家发布了2022年财报。财报显示,2022年海尔智家实现收入2435.14亿元,同比增长7.2%,营收逆势增长跑赢行业;归母净利润147.11亿元,同比增长12.5%,扣非归母净利润......