当前位置: 首页 > news >正文

CF 850 C Arpa and a game with Mojtaba(爆搜优化SG)

CF 850 C. Arpa and a game with Mojtaba(爆搜优化SG)

Problem - C - Codeforces

Arpa and a game with Mojtaba - 洛谷

思路:显然对于每一种质因子来说操作都是独立的 , 因此可以考虑对于每一种质因子求当前质因子的SG , 然后考虑组合这些局面。

对于每一种质因子来说 , 问题转化成了 , 当前状态有 n 堆石子 ,数量最多一堆的石子数量为 m 个 , 每人每次可以选择[1 - m]中任意一个数 t , 然后把所有数量 大于等于 t 的石子堆拿走 t 个 , 先不能操作的失败 , 问先手获胜情况。

打表发现一点规律都没有 , 又考虑到每一个数分解质因数后的数量很少 , 考虑爆搜SG。

对于爆搜可以考虑两个剪枝

1. 首先对于任意一个状态 , 排序后状态本质上不变 , 因此可以用一个状态的最小字典序或最大字典序表示当前状态。这样方便记忆化搜索。

2. 0 对于状态是无意义的 , 因此可以边操作边把0删去

3. 对于记忆化搜索的 map 来说 , 访问值之前一定要判空!!!

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define int long long
const int INF = 9e9;
const int N = 2e6 + 10;
const int mod = 1e9 + 7;
typedef pair<int,int>PII;#define ull unsigned long long
#define lld long double
map<int , int>factor;int qmul(int a ,int b,int mod){//快速乘,防止数据溢出 int c = (lld) a / mod * b;int res = (ull) a * b - (ull) c * mod;return (res + mod) % mod;
}int qual(int x,int d,int p){int ans = 1;while(d){if(d & 1) ans = qmul(ans , x , p); x = qmul(x , x , p);d >>= 1;}return ans;
}int A[] = {2 , 325 , 9375 , 28178 , 450775 , 9780504 , 1795265022};//判断素数 
bool miRoben(int x){if(x < 3 || x % 2 == 0) return x == 2;int d = x - 1 , r = 0;while(d % 2 == 0){d /= 2;r += 1;}for(auto a : A){int v = qual(a,d,x);if(v == 1 || v == x - 1 || v == 0) continue;for(int i = 1 ; i <= r ; i ++){v = qmul(v , v , x);if(v == x - 1 && i != r){v = 1;break;}if(v == 1) return false;}if(v != 1)return false;//费马小定理检验 }return true;
}int Pollard_Rho(int x){int s = 0 , t = 0;int c = (int)rand() % (x - 1) + 1;int step = 0 , goal = 1;int val = 1;for(goal = 1;;goal <<= 1 , s = t , val = 1){for(step = 1 ; step <= goal ; step ++){t = (qmul(t , t , x) + c) % x;val = qmul(val , abs(t - s) , x);if(step % 127 == 0){int d = __gcd(val , x);if(d > 1) return d;}}int d = __gcd(val , x);if(d > 1) return d;}
}//分解质因子 
void find(int n){if(n == 1) return;if(miRoben(n)){factor[n] += 1;return;}int p = n;while(p == n) p = Pollard_Rho(n);find(p);find(n / p);
}map<int , vector<int>> mp;map<vector<int> , int> dp;// 爆搜剪枝
//剪枝 对于 3 1 2 和 3 2 1 这两个状态显然相同 , 考虑每个状态用最小状态表示
//0 显然是无用状态 ,删掉即可int sg(vector<int> now) {sort(now.begin() , now.end() , greater<int>()); while(!now.back()) now.pop_back();if(dp.find(now) != dp.end()) return dp[now];set<int>st;int n = now.size();int maxx = now[0];for(int i = 1 ; i <= maxx ; i ++) {vector<int>oth = now;for(int j = 0 ; j < n ; j ++) {if(oth[j] >= i) oth[j] -= i;}st.insert(sg(oth));}for(int i = 0 ; ; i ++) if(!st.count(i)) return dp[now] = i;
}void init() {factor.clear();
}int n;signed main(){IOScin >> n;for(int i = 1 ; i <= n ; i ++) {int now; cin >> now;init();find(now);for(auto [x , y] : factor) {mp[x].push_back(y);}}int res = 0;for(auto [x , y] : mp) {res ^= sg(y); }cout << ((res == 0) ? "Arpa" : "Mojtaba");return 0;
}
//freopen("文件名.in","r",stdin);
//freopen("文件名.out","w",stdout);

相关文章:

CF 850 C Arpa and a game with Mojtaba(爆搜优化SG)

CF 850 C. Arpa and a game with Mojtaba&#xff08;爆搜优化SG&#xff09; Problem - C - Codeforces Arpa and a game with Mojtaba - 洛谷 思路&#xff1a;显然对于每一种质因子来说操作都是独立的 &#xff0c; 因此可以考虑对于每一种质因子求当前质因子的SG &#…...

kafka分布式安装部署

1.集群规划 2.集群部署 官方下载地址&#xff1a;http://kafka.apache.org/downloads.html &#xff08;1&#xff09;上传并解压安装包 [zhangflink9wmwtivvjuibcd2e package]$ tar -zxvf kafka_2.12-3.3.1.tgz -C ../software/&#xff08;2&#xff09;修改解压后的文件…...

[云原生2.] Kurbernetes资源管理 ---- (陈述式资源管理方式)

文章目录 1. K8s管理资源的方法类别1.1 陈述式资源管理方式1.2 声明式资源管理方式1.3 GUI式资源管理方法 2. 陈述式资源管理方式2.1 命令行工具 ---- Kubelet2.1.1 简介2.1.2 特性2.1.3 kubelet拓展命令2.1.4 kubectl基本语法2.1.5 Kubectl工具的自动补全 2.2 k8s Service 的类…...

java:IDEA中的Scratches and Consoles

背景 IntelliJ IDEA中的Scratches and Consoles是一种临时的文件编辑环境&#xff0c;用于写一些文本内容或者代码片段。 其中&#xff0c;Scratch files拥有完整的运行和debug功能&#xff0c;这些文件需要指定编程语言类型并且指定后缀。 举例&#xff1a;调接口 可以看到…...

华为 Mate 60 Pro 拆解:陆制零件比率上升至47% | 百能云芯

近日&#xff0c;日经新闻联合研究公司Fomalhaut Techno Solutions对华为 Mate 60 Pro 进行了拆解&#xff0c;揭示了这款于8月发布的新型智能手机的成本结构。拆解结果显示&#xff0c;该手机的国产零部件比例达到了47%&#xff0c;相较于三年前的 Mate 40 Pro&#xff0c;提高…...

ZBrush 2024(三维数字雕刻软件)

ZBrush是一款Mac数字雕刻软件&#xff0c;它具有以下功能&#xff1a; 雕刻工具&#xff1a;ZBrush的雕刻工具非常强大&#xff0c;可以让用户在3D模型上进行雕刻&#xff0c;就像使用传统雕塑工具一样。高精度模型创建&#xff1a;ZBrush可以创建高精度的3D模型&#xff0c;适…...

wpf devexpress 排序、分组、过滤数据

这个教程示范在GridControl如何排序数据&#xff0c;分组数据给一个行创建一个过滤。这个教程基于前一个教程。 排序数据 可以使用GridControl 排序数据。这个例子如下过滤数据对于Order Date 和 Customer Id 行&#xff1a; 1、对于Order Date 和 Customer Id 行指定Colum…...

使用Badboy录制生成 JMeter 脚本

JMeter是一款在国外非常流行和受欢迎的开源性能测试工具&#xff0c;像LoadRunner 一样&#xff0c;它也提供了一个利用本地Proxy Server&#xff08;代理服务器&#xff09;来录制生成测试脚本的功能&#xff0c;但是这个功能并不好用。所以在本文中介绍一个更为常用的方法——…...

V10 桌面版、服务器版系统加固

V10 桌面版、服务器版系统加固 一、 文档说明 本文档中涉及的加固方法主要包括&#xff1a;密码策略配置、防火墙规 则配置、禁用高风险服务等。 二、 V10 桌面版系统加固 2.1 密码策略配置 密码策略包括密码老化控制策略和密码复杂度策略。密码老化 控制策略需要配置/etc…...

mtgsig1.2简单分析

{"a1": "1.2", # 加密版本"a2": new Date().valueOf() - serverTimeDiff, # 加密过程中用到的时间戳. 这次服主变坏了, 时间戳需要减去一个 serverTimeDiff(见a3) ! "a3": "这是把xxx信息加密后提交给服务器, 服主…...

场景交互与场景漫游-osgGA库(5)

osgGA库 osgGA库是OSG的一个附加的工具库&#xff0c;它为用户提供各种事件处理及操作处理。通过osgGA库读者可以像控制Windows窗口一样来处理各种事件 osgGA的事件处理器主要由两大部分组成&#xff0c;即事件适配器和动作适配器。osgGA:GUIEventHandler类主要提供了窗口系统的…...

Leetcode -1

Leetcode Leetcode -521.最长特殊序列Leetcode - 541.反转字符串Ⅱ Leetcode -521.最长特殊序列 题目&#xff1a;给你两个字符串 a 和 b&#xff0c;请返回 这两个字符串中 最长的特殊序列的长度。如果不存在&#xff0c;则返回 - 1 。 「最长特殊序列」 定义如下&#xff1…...

系列四、JVM的内存结构【本地接口(Native Interface)】

一、组成 本地接口由本地方法栈&#xff08;Native Method Stack&#xff09;、本地方法接口&#xff08;Native Interface&#xff09;、本地方法库组成。 二、本地接口的作用 本地接口的作用是融合不同的编程语言为Java所用&#xff0c;它的初衷是融合C/C程序&#xff0c;Jav…...

大型语言模型中的幻觉研究综述:原理、分类、挑战和未决问题11.15+11.16+11.17

大型语言模型中的幻觉研究综述&#xff1a;原理、分类、挑战和未决问题11.15 摘要1 引言2 定义2.1 LLM2.3 大语言模型中的幻觉 3 幻觉的原因3.1 数据的幻觉3.1.1 有缺陷的数据源3.1.2 较差的数据利用率3.1.3 摘要 3.2 来自训练的幻觉3.2.1训练前的幻觉3.2.2来自对齐的幻觉3.2.3…...

redis悲观锁和乐观锁

redis悲观锁 Redis加锁命令分有INCR、SETNX、SET 一、INCR锁 key不存在时&#xff0c;key的值会先被初始化为0&#xff0c;其它用户在执行INCR操作进行加一&#xff0c; 如果返回的数大于1&#xff0c;说明这个锁正在被使用当中&#xff0c;通常用在同时只能有一个人可以操作某…...

前端项目练习,首页退出登录功能,清除token --点击事件 quitFn

<el-menu-item index"2" click"quitFn"><i class"el-icon-switch-button">退出</i> </el-menu-item>quitFn() {// 为了让用户体验更好&#xff0c;来个确认提示框this.$confirm("确认退出登录吗&#xff1f;退出登…...

nodejs+vue杰和牧场管理系统的设计与实现-微信小程序-安卓-python-PHP-计算机毕业设计

系统涉及的对象是奶牛。 系统使用员工有管理员和普通员工。 管理员有修改的权限&#xff0c;普通员工没有。系统包含新闻功能&#xff0c;最好是有个后台管理&#xff0c;在后台输入新闻标题和内容&#xff0c;插入图片&#xff0c;在网页上就可以展示。最好再有个轮播图。 新闻…...

基于STM32的蓝牙低功耗(BLE)通信方案设计与实现

蓝牙低功耗&#xff08;Bluetooth Low Energy&#xff0c;简称BLE&#xff09;是一种能够在低功耗环境下实现无线通信的技术。在物联网应用中&#xff0c;BLE被广泛应用于传感器数据采集、健康监测设备、智能家居等领域。本文将基于STM32微控制器&#xff0c;设计并实现一个简单…...

qt 重载信号,使用““方式进行connect()调用解决方案

问题 在Qt中&#xff0c;重载的信号默认是无法使用&这种方式调用的。 因为&只能绑定到一个具体的信号&#xff0c;而重载的信号名称相同&#xff0c;编译器无法确定要绑定哪一个信号。 解决方案 如果非要使用&绑定重载的信号&#xff0c;可以使用函数指针进行转…...

阿里云+宝塔部署项目(Java+React)

阿里云服务器宝塔面板部署项目&#xff08;SpringBoot React&#xff09; 1. 上传所需的文件到服务器 比如jdk包和java项目的jar&#xff1a;这里以上传jar 为例&#xff0c;创建文件夹&#xff0c;上传文件&#xff1b; 在创建的文件夹下上传jar包 上传jdk 2. 配置jdk环境 3.…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...