ICPC2024 邀请赛西安站 F L题解

F - XOR Game

题意

给定n,k ,k代表0的个数,现在有一个数x初始为0

接下来n个数,每一个数a_i \left ( 0\leq i< n \right )代表2^i这个数字的个数

每次操作可以选择a数组中的一个数字并且可以选择是否将这个x异或上这个数字,然后把这个数字从a数组中删除,Alice先手,Alice想让答案尽可能大,Bob想让答案尽可能小,问最后答案(用n位二进制数输出)

思路

手玩一下可以发现,假设此时某一位数字有a_i个,当a_i>=3的时候,无论谁选择这个数,无论x是否异或上这个数字,对答案都没有任何影响,只有当a_i==2的时候,当其中一个人选择这个数字的时候,另一个人都可以选择对应的操作使得这一位上的答案最小/最大,当a_i==1的时候,ALICE和BOB肯定能选择选,ALICE一定会把x异或上这个数,BOB一定会把这个数直接删掉

于是就把a_i==1的存下来,从大到小遍历,答案一定异或上奇数位的a_i(Alice优先操作),然后把每次操作存下来

然后把0和所有a_i>=3的部分也存下来,判断存下来的操作数是奇数还是偶数,是奇数的话,接下来Bob操作,Bob每一次操作Alice都能找到对应的操作使得这一位为1,是偶数的话Alice的每一次操作Bob都能找到对应的操作使这一位为0

代码

#include <map>
#include <set>
#include <queue>
#include <deque>
#include <cmath>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;
#define fi first
#define se second
#define u1 (u<<1)
#define u2 (u<<1|1)
#define pb push_back
#define pp pop_back()
#define int long long
#define laile cout<<"laile"<<endl
#define lowbit(x) ((x)&(-x))
#define double long double
#define sf(x) scanf("%lld",&x)
#define sff(x,y) scanf("%lld %lld",&x,&y)
#define sd(x) scanf("%Lf",&x)
#define sdd(x,y) scanf("%Lf %Lf",&x,&y)
#define _for(i,n) for(int i=0;i<(n);++i)
#define _rep(i,a,b) for(int i=(a);i<=(b);++i)
#define _pre(i,a,b) for(int i=(a);i>=(b);--i)
#define all(x) (x).begin(), (x).end()
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
typedef unsigned long long ULL;
typedef pair<int,int>PII;
const int N=1e6+10,INF=4e18;
int n,m;
string s,pres;
vector<int>v;
void solve()
{
	cin>>n>>m;
	_rep(i,0,n-1)s+='0',pres+='0';
	_rep(i,0,n-1)
	{
		int x;
		cin>>x;
		if(!x)continue;
		if(x==1)v.pb(i);
		else 
		{
			if(x>2)m+=x-2;
			pres[i]='1';
		}
	}
	int res=0;
	reverse(all(v));
	_for(i,(int)v.size())
	{
		if(i%2==0)s[v[i]]='1';
		m++;
	}
	if(m&1)
	{
		_rep(i,0,n-1)
			if(s[i]=='0')s[i]=pres[i];
	}
	_pre(i,n-1,0)
		cout<<s[i];
	return ;
}
signed main()
{
	IOS;
	int T=1;
//	cin>>T
	while(T--)
		solve();
	return 0;
}

L - Rubbish Sorting

思路

操作为1的时候,用一遍深搜把所有情况的编号用map存下来(注意不匹配被标记为‘*’),时间复杂度最多为2^5=32比如

假设输入样例

3
1 aa 2
1 ab 1
2 ba

输入1 aa 2

那么此时mp[aa]=2,mp[a]=2,mp[*]=2,mp[a*]=2,mp[*a]=2,mp[**]=2

假设在这之后输入1 ab 1

那么接下来mp[ab]=1,mp[a]=1(更新),mp[a*]=1(更新),mp[*b]=1,mp[**]=1(更新)

接下来询问,只需要深搜找到匹配字母数量最多的对应的map编号即可(不匹配被标记为‘*’)

假设输入 2 ba

此时mp[]找不到"ba",于是深搜一个不匹配mp[b*]和mp[*a],找到了并且输出这一轮的最小序号也就是mp[*a]=2,于是这一次询问终止,不需要在深搜两个不匹配的情况,此时输出序号2

代码

#include<bits/stdc++.h>
using namespace std;
#define sf(x) scanf("%lld",&x)
#define sff(x,y) scanf("%lld%lld",&x,&y)
#define endl '\n'
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define pf(x) printf("%lld",x)
#define pii pair<int,int> 
#define f first 
#define s second
#define int long long

typedef unsigned long long ull;

//
//
const int N = 3e5+10;
const ull P = 13331;
unordered_map<ull,int> mp;
int m;
char ss[N];
void mpp(ull str,int n)
{
	if(mp.count(str))
		mp[str]=min(mp[str],n);
	else mp[str]=n;
}

void dfs1(int u,ull now,int op)
{
	ull z = now;
	if(u==strlen(ss))
	{
		int n=5-strlen(ss);
		while(n--) now=now*P+(ull)'*';
		mpp(now,op);
		return ;
	}	
	dfs1(u+1,now*P+ss[u],op);
	dfs1(u+1,now*P+'*',op);
}

int dfs2(int u,ull now,int j,int now1)
{
	int res=0x3f3f3f3f;
	if(u==strlen(ss))
	{
		int n=5-strlen(ss);
		while(n--) now=now*P+(ull)'*';
		if(mp.count(now)) return mp[now];
		else return 0x3f3f3f3f;
	}
	if(now1<j){	
		res=min(res,dfs2(u+1,now*P+'*',j,now1+1));
	}
	
	res=min(res,dfs2(u+1,now*P+ss[u],j,now1));	
	return res;
}
void solve()
{
	sf(m);
	for(int i=1;i<=m;i++)
	{
		int op,x;
		sf(op);
		scanf("%s",ss);
		if(op==1){
			sf(x);
			dfs1(0,0,x);
		}
		else
		{
			int len=strlen(ss);
			for(int j=0;j<=len;j++)
			{
				int now=dfs2(0,0,j,0);
				if(now!=0x3f3f3f3f) 
				{
					pf(now);
					puts("");
					break;
				}
			}
		}
	}
}
signed main()
{
//	IOS
	int _=1;
	while(_--)
		solve();
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

腾讯音乐2024 Q2财报稳中有进,首席执行官梁柱(Ross Liang)强调平台创新

8 月 13 日&#xff0c;腾讯音乐娱乐集团&#xff08;Tencent Music Entertainment Group&#xff0c;以下简称“TME”&#xff09;发布 2024 年第二季度财报。本季度集团各项核心财务指标稳健增长&#xff0c;总收入达 71.6 亿元&#xff0c;调整后净利润 19.9 亿元&#xff0…

《Learning to Prompt for Vision-Language Models》CoOp论文中文校对版

系列论文研读目录 文章目录 系列论文研读目录摘要1 简介2 相关工作2.1视觉语言模型2.2 NLP中的提示学习 3 方法论3.1视觉语言预训练3.2上下文优化3.3讨论 4 实验4.1Few-Shot学习4.2领域泛化4.3进一步分析 5 结论、局限性和未来的工作 摘要 像CLIP这样的大型预训练视觉语言模型…

基于SpringBoot+Vue的篮球馆会员信息管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

36.贪心算法3

1.坏了的计算器&#xff08;medium&#xff09; . - 力扣&#xff08;LeetCode&#xff09; 题目解析 算法原理 代码 class Solution {public int brokenCalc(int startValue, int target) {// 正难则反 贪⼼int ret 0;while (target > startValue) {if (target % 2 0…

深入理解中比较两个字符串差异的方法”或“高效比对字符串:diff-match-patch:c++实战指南

diff-match-patch 是一个强大的开源 JavaScript 库&#xff0c;由 Google 开发并维护&#xff0c;用于计算两个字符串之间的差异&#xff0c;并进行高效的匹配和补丁应用。这个库广泛应用于版本控制系统、协同编辑系统以及任何需要处理文本变化的场景。 GitHub地址&#xff1a;…

继承1 2024_9_18

1.继承的基本用法 当需要继承的时候,我们就在派生类的后面加上一个权限父类,这个权限可以是公有,保护和私有,后面就是继承的父类.此时,下面的stu这个派生类,也就可以使用Person里面的方法了. 2.继承基类成员访问方式的变化 当父类被继承到派生类的时候,此时会根据继承方式的不…

k8s的NodeIP、PodIP、ClusterIP、ExternalIP

1.NodeIP K8s集群由Master Node与Worker Node组成。 Node&#xff1a;组成k8s集群的机器&#xff0c;可以是物理机或虚拟机。 Master Node &#xff1a;管理节点也叫控制平面主要负责管理控制方面。 Worker Node&#xff1a;&#xff1a;工作节点用于部署处理业务的工作负载或p…

spring springboot 日志框架

一、常见的日志框架 JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j.... 注意&#xff1a;SLF4j 类似于接口 Log4j &#xff0c;Logback 都是出自同一作者之手 JUL 为apache 公司产品 Spring&#xff08;commons-logging&#xff09;、Hibernate&#xff08;jboss…

万兆时代 TCP/IP如何赋能以太网飞跃

科技飞速发展&#xff0c;数据传输的需求日益增长&#xff0c;尤其是在物理、科研等领域&#xff0c;对数据传输的速度、稳定性和效率提出了更高的要求。在这样的背景下&#xff0c;万兆以太网&#xff08;10Gbit Ethernet&#xff09;以其高带宽、低延迟和强大的传输能力成为众…

视频监控摄像头国标GB28181配置参数逐条解析

转载&#xff1a;视频监控摄像头国标GB28181配置参数逐条解析 现在的很多信息化项目&#xff0c;都会涉及到国标GB28181的视频监控产品&#xff0c;当我们配置这些国标平台&#xff0c;录像机&#xff0c;摄像头时&#xff0c;如果对相关参数的定义不清楚的话&#xff0c;会给我…

Vulnhub:BlueSky

靶机下载地址 信息收集 主机发现 nmap扫描攻击机同网段存活主机。 nmap 192.168.31.0/24 -Pn -T4 靶机ip&#xff1a;192.168.31.171。 端口扫描 nmap 192.168.31.171 -A -p- -T4 开放端口22,8080。 目录扫描 访问8080端口&#xff0c;如图&#xff0c;是tomcat管理页面…

硬件工程师笔试面试——变压器

目录 9、变压器 9.1 基础 变压器原理图 变压器实物图 9.1.1 概念 9.1.2 变压器组成结构 9.1.3 变压器原理 9.1.4 变压器的类型 9.1.5 应用领域 9.2 相关问题 9.2.1 变压器的工作原理是什么? 9.2.2 如何选择合适的变压器类型? 9.2.3 变压器在实际应用中,如何进行…

安卓BLE蓝牙通讯

蓝牙测试demo 简介   Android手机间通过蓝牙方式进行通信&#xff0c;有两种常见的方式&#xff0c;一种是socket方式&#xff08;传统蓝牙&#xff09;&#xff0c;另一种是通过GATT&#xff08;BLE蓝牙&#xff09;。与传统蓝牙相比&#xff0c;BLE 旨在大幅降低功耗。这样…

iKuai使用及设置流程

iKuai使用及设置流程 iKuai安装步骤 一、配置主机 1.电脑连接ETH0网口 2.ETH1网口连接猫上面的千兆口 3.手动配置pc的IP地址和192.168.1.1./24在同一网段 3.浏览器输入192.168.1.1 admin admin 二、外网设置 1.直接联通电信网络设置 2.点击 网络设置-内外网设置-点击接…

Python “字符串操作” ——Python面试100道实战题目练习,巩固知识、检查技术、成功就业

本文主要是作为Python中列表的一些题目&#xff0c;方便学习完Python的元组之后进行一些知识检验&#xff0c;感兴趣的小伙伴可以试一试&#xff0c;含选择题、判断题、实战题、填空题&#xff0c;答案在第五章。 在做题之前可以先学习或者温习一下Python的列表&#xff0c;推荐…

食品检测与分类系统源码分享

食品检测与分类检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

推荐10款最佳的电脑监控软件,知名电脑监控软件推荐

随着互联网和科技的飞速发展&#xff0c;电脑监控软件成为企业和个人用户管理和保护信息安全的必备工具。这些软件可以帮助你实时了解电脑的使用情况、保护隐私、优化工作效率&#xff0c;甚至防止潜在的安全威胁。在这篇文章中&#xff0c;我们将为你推荐10款最佳的电脑监控软…

iPhone 16系列:摄影艺术的全新演绎,探索影像新境界

在科技的浪潮中&#xff0c;智能手机摄影功能的进化从未停歇。 苹果公司即将推出的iPhone 16系列&#xff0c;以其卓越的相机升级和创新特性&#xff0c;再次站在了手机摄影的前沿。 从硬件到软件&#xff0c;从拍照体验到图像处理&#xff0c;iPhone 16系列都展现了其在移动…

1×4矩阵键盘详解(STM32)

目录 一、介绍 二、传感器原理 工作原理介绍 三、程序设计 main.c文件 1x4key.h文件 1x4key.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 矩阵键盘是单片机外部设备中所使用排布类似于矩阵键盘组&#xff0c;矩阵式结构的键盘会比独立键盘复杂一点&#xff…

国内外ChatGPT网站集合,无限制使用【2024-09最新】~

经过我一年多以来&#xff0c;使用各种AI工具的体验&#xff0c;我收集了一批AI工具和站点 这些工具都是使用的最强最主流的模型&#xff0c;也都在各个领域里都独领风骚的产品。 而且&#xff0c;这些工具你都可以无限制地使用。 无论你是打工人、科研工作者、学生、文案写…