算法学习16:数论03(容斥原理、博弈论)

算法学习16:数论03(容斥原理、博弈论)


文章目录

  • 算法学习16:数论03(容斥原理、博弈论)
  • 前言
  • 一、容斥原理:求多个集合的并集
  • 二、博弈论
    • 1.Nim游戏:
    • 2.集合N-im游戏
  • 总结


前言

在这里插入图片描述


提示:以下是本篇文章正文内容:

一、容斥原理:求多个集合的并集

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

// 例题:给定n和m个不同的质数p1,p2,...,pm
// 请你求出1~n中能被p1,p2,...,pm中至少被一个数整除的有多少个?
#include <iostream>
#include <algorithm>

using namespace std;

typedef long long LL;

const int N = 20;

int n, m;
int p[N];// 存储输入的m个质数 

int main()
{
	cin >> n >> m;
	for(int i = 0; i < m; i ++) cin >> p[i];
	
	int res = 0;
	for(int i = 1; i < 1 << m; i ++)// 循环 2^m-1 次 
	{
		int t = 1, cnt = 0;// t:标志,cnt:判断 奇 还是 偶 集合 
		for(int j = 0; j < m; j ++)
			if(i >> j & 1)
			{
				cnt ++;
				// 分母比分子大,跳 
				if((LL)t * p[j] > n)
				{
					t = -1;
					break;
				}
				t *= p[j];// 计算分母 
			}
		if(t != -1)
		{
			if(cnt % 2) res += n / t;// 奇 正 
			else res -= n / t;// 偶 负 
		}
	}
	cout << res << endl;
	return 0;
 } 

在这里插入图片描述

二、博弈论

1.Nim游戏:

在这里插入图片描述
在这里插入图片描述

// Nim游戏:给定n堆石子,两位玩家轮流操作,
// 每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),
// 最后无法进行操作的人视为失败。
// 问:如果两人都采用最优策略,先手是否必胜

/*
先手必胜状态:可以走到一个让对手必败的状态 
先手必败状态: 走不到一个可以让自己必胜的状态,找不到对方必败的机会 
*/

/*
输入:第一行包含整数n,第二行包含n个数字,第i个数字表示第i堆石子的数量
输出:Yes,No(能否先手必胜) 
*/

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
	int n;
	int res = 0;
	
	scanf("%d", &n);
	while(n --)
	{
		int x;
		scanf("%d", &x);
		res ^= x;
	}
	
	if(res) puts("Yes");// 不为0 
	else puts("No");// 为0 
	return 0;
 } 

在这里插入图片描述



2.集合N-im游戏



在这里插入图片描述



在这里插入图片描述



// 集合-Nim游戏:给定n堆石子和一个有k个不同正整数构成的数字集合S
// 现在两位玩家轮流操作,每次操作可以从任意一堆石子中拿取石子,
// 每次拿取的石子数量必须包含于集合S,最后无法进行操作的人视为失败
// 问两人都采用最优策略,先手是否必胜

#include <iostream>
#include <algorithm>
#include <cstring>
#include <unordered_set>

using namespace std;

const int N = 110,  M = 10010;

int n, m;
int s[N], f[N];// s:每次拿s[i]个石子,f:记忆化存储 

int sg(int x)
{
	// 记忆化搜索,已经有的元素,直接返回 
	if(f[x] != -1) return f[x];
	
	unordered_set<int> S;// 存储sg(x)可能的情况 
	// x的下一个状态!!!(重点) 
	for(int i = 0; i < m; i ++)
	{
		int sum = s[i];
		if(x >= sum) S.insert(sg(x - sum));
	}
	// mex操作: 
	for(int i = 0; ; i ++)
		if(!S.count(i)) return f[x] = i;
}

int main()
{
	cin >> m;
	for(int i = 0; i < m; i ++) cin >> s[i];
	cin >> n;
	
	memset(f, -1, sizeof f);
	
	int res = 0;
	for(int i = 0; i < n; i ++)
	{
		int x;
		cin >> x;
		res ^= sg(x);// 所有数异或 
	}
	// 不为0:先手必胜 
	if(res) puts("Yes");
	else puts("No");
	return 0;
}

在这里插入图片描述


总结

提示:这里对文章进行总结:

💕💕💕

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

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

相关文章

【AI系列】Python NLTK 库和停用词处理的应用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

04 | Swoole 源码分析之 epoll 多路复用模块

首发原文链接&#xff1a;Swoole 源码分析之 epoll 多路复用模块 大家好&#xff0c;我是码农先森。 引言 在传统的IO模型中&#xff0c;每个IO操作都需要创建一个单独的线程或进程来处理&#xff0c;这样的操作会导致系统资源的大量消耗和管理开销。 而IO多路复用技术通过…

INA350ABSIDDFR 仪表放大器 单路低功耗 TSOT-23-8

NA350ABSIDDFR 是一款高精度、低功耗、单片式精密运算放大器。它具有出色的直流精度和低失调电压&#xff0c;适用于需要高精度信号处理的应用。这款产品广泛应用于各种领域&#xff0c;如工业控制、医疗设备、测试与测量设备以及通信系统等。 制造商: Texas Instruments …

Apollo配置中心使用

apollo配置中心使用 Apollo配置中心-简介apollo源码Apollo配置基本概念Apollo特性Apollo基础模型Apollo架构设计Apollo架构设计-实时推送设计Apollo架构设计-可用性Apollo架构设计-监控Apollo架构设计-扩展Apollo-本地部署准备工作安装步骤mysql命令行创建ApolloPortalDBmysql客…

实时的软件生成 —— Prompt 编程打通低代码的最后一公里?

原文&#xff1a;实时的软件生成 —— Prompt 编程打通低代码的最后一公里&#xff1f;_运行_问题_示例 PS&#xff1a;这也是一篇畅想&#xff0c;虽然经过了一番试验&#xff0c;依旧有一些不足&#xff0c;但是大体上站得住脚。 传统的软件生成方式需要程序员编写大量的代…

矩阵间关系的建立

参考文献 2-D Compressive Sensing-Based Visually Secure Multilevel Image Encryption Scheme 加密整体流程如下: 我们关注左上角这一部分: 如何在两个图像之间构建关系,当然是借助第3个矩阵。 A. Establish Relationships Between Different Images 简单说明如下: …

Redis类型 Stream Bitfield

Stream 类型 Stream类型就是Redis里的mq,是redis为了占领市场份额的产物 今天我们就来介绍一下Stream Redis的消息队列一般是两个方案 第一个是Lpush Rpop 队列的异步队列方案(一对一) 第二个方案就是pubsub(发布订阅)模式 (一对多) 注:这里如果没有消费者了,队列中的数据就直…

android RK3328 gpio处理,android高级面试2024

public static class CommandResult { public int result -1; public String errorMsg; public String successMsg; } /** 执行命令—单条 param command param isRoot return */ public static CommandResult execCommand(String command, boolean isRoot) { Str…

已上线项目,突然有一天网站虽进得去,但是接口拿不到数据,作为前端的你如何排查问题?

在开始写这篇博客之前,想说几句题外话哈,虽然自己的粉丝不多,但自己每篇博客都是用心在写,可能后面会针对部分文章开启只有VIP才能访问,原因你们也懂得(▽),无非是想赚点外块呗,不过主要现在也是知识付费时代,毕竟自己写出的东西也是本人亲身经历着,也是具有一定的价值…

试题G(买二赠一)

问题描述】 某商场有 N 件商品&#xff0c;其中第 i 件的价格是 Ai。现在该商场正在进行 “买二 赠一” 的优惠活动&#xff0c;具体规则是&#xff1a; 每购买 2 件商品&#xff0c;假设其中较便宜的价格是 P&#xff08;如果两件商品价格一样&#xff0c; 则 P 等于其中一件…

Python之Opencv进阶教程(2):统计图片灰度级别的像素数量

1、什么是灰度像素数量 在OpenCV中&#xff0c;可以使用**cv2.calcHist()**函数来计算图像的直方图。直方图是一种图形统计表&#xff0c;用于表示图像中每个灰度级别&#xff08;或颜色通道&#xff09;的像素数量或密度分布。以下是一个示例代码&#xff0c;演示了如何使用O…

CTK插件框架学习-插件注册调用(03)

CTK插件框架学习-新建插件(02)https://mp.csdn.net/mp_blog/creation/editor/136923735 一、CTK插件组成 接口类&#xff1a;对外暴露的接口&#xff0c;供其他插件调用实现类&#xff1a;实现接口内的方法激活类&#xff1a;负责将插件注册到CTK框架中 二、接口、插件、服务…

CSS绘制三角形和梯形

以上效果对应的CSS依次如下&#xff0c;从左往右依次看就很直观了。 .border {width: 30px;height: 30px;margin: 10px;background-color: lightblue;&_1 {border: solid 1px #b160e7;}&_2 {border-top: solid 15px lightcoral;border-right: solid 15px lightgoldenr…

互联网、因特网、万维网的区别

互联网 internet&#xff1a;凡是能彼此通信的设备组成的网络就叫互联网&#xff0c;即使只有两台计算机&#xff0c;无论以何种技术使其彼此通信&#xff0c;都叫互联网。所以&#xff0c;根据互联网的覆盖规模可以分为&#xff1a; 局域网&#xff08;Local Area Network&am…

阿里云服务器经济型e实例特点、适用场景介绍和问题解答

阿里云服务器ECS经济型e系列是阿里云面向个人开发者、学生、小微企业&#xff0c;在中小型网站建设、开发测试、轻量级应用等场景推出的全新入门级云服务器&#xff0c;CPU处理器采用Intel Xeon Platinum架构处理器&#xff0c;支持1:1、1:2、1:4多种处理器内存配比&#xff0c…

腾讯云docker创建容器镜像及仓库

这里为了尽量简单&#xff0c;直接用腾讯云容器版本服务器 腾讯云有自己的镜像加速地址&#xff0c;速度还可以&#xff0c;单纯拉取容器还是够用的 但是当我push容器出现各种各样问题因为网络原因&#xff0c;国内访问docker官方镜像站非常麻烦&#xff0c;所以使用阿里的镜像…

储能系统--充电桩中国市场展望(四)

一、充电桩发展 充电桩产业十余年萌芽成长&#xff0c;迈入高速增长时代。2006-2015年为中国充电桩行业萌芽期&#xff0c;2006年&#xff0c;比亚迪在深圳总 部建立了第一座汽车充电站。2008年&#xff0c;北京市奥运会期间建设了国内第一个集中式充电站&#xff0c;在这个阶…

ctf.show_web

11.ctf.show_web11 解题步骤 密码为空&#xff0c;用 bp 抓包&#xff0c;去掉 session。 $password$_SESSION[password]&#xff1a;输入的password和session的结果一致 后端代码就是拿这个session的value值与我们输入的密码进行匹配, 由于这个value值我没解密出来, 所以这…

Unity中如何实现草的LOD

1&#xff09;Unity中如何实现草的LOD 2&#xff09;用Compute Shader处理图像数据后在安卓机上不能正常显示渲染纹理 3&#xff09;关于进游戏程序集加载的问题 4&#xff09;预制件编辑模式一直在触发自动保存 这是第379篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热…

Sakana 与 Jamba

这篇不是什么技术文章,入门没门槛,浅显易懂。 测试完了DBRX,还行吧,但是也没说给我带来多大惊喜,看的出来dataset选的挺好,比如中文语料的识别,也看得出来对推理做了很大的功夫,几乎所有的复杂逻辑全按COT by default呈现,这些是优点,要说缺点,没啥特点,现在说实话…