质数与合数

质数与合数

题意:

FFF和GGG正在玩一个质数与合数的游戏
一开始有N个石头
FFF和GGG轮流对这堆石头进行操作,FFF每次选择1到K之间的一个数x,并拿走x个石头,拿走之后剩下的石头数量必须是质数
接着GGG进行同样的操作,但是要求拿走之后剩下的石头数量必须是合数
假设双方都足够聪明,第一个不能操作的人输
以为到这里就结束了?
显然,一开始两人之间有一人知道自己有必胜策略,现在他想要尽可能快的赢,另外一个人则想要尽可能输的慢一点
给你N与K,假设游戏最终持续了X轮,如果FFF赢了,输出X,否则输出-X
注意:1既不是质数也不是合数

题解:

判断输赢很简单,因为每次取数范围是[1,K],而FFF要每次取完都是质数,如果存在两个相邻的质数,差大于K+1,也就是无论取任何数都不可能剩下为质数,那么FFF就输了,反之FFF必胜,因为FFF都能取到,但是游戏到最后时,剩下34,5,GGG都会输,所以FFF必胜
本题麻烦在计算游戏会进行几轮
根据题意,游戏的胜负从一开始就给定了,但是赢的人想赶紧赢,输的人想慢点输。如果是FFF输了,保证GGG步骤最少,呢么GGG每次都走到下一个素数的前一个的位置,(相当于故意恶心FFF,让FFF正好错过自己的质数),FFF就永远不能跳过相差大于k+1的两个点。
就比如当前点是31,K=3,轮到GGG了,现在离30最近的质数是29,GGG就走到28(因为GGG不能走到质数),让FFF错过自己的质数
如果是FFF赢了,他想赶紧结束比赛就会尽可能跳更远的质数,而GGG为了拖慢,每次只会跳一个单位,当然当跳到2,3时GGG就算输了,不能再跳

代码:

懒得写了,官方代码,但是我每句话做了详细注释

#include <bits/stdc++.h>
using namespace std;
const int N=1e7+5;int prime[N],cnt=0;
bool st[N];void init()
{for(int i=2;i<=N-5;i++){if(!st[i]) {prime[cnt++]=i;}for(int j=0;prime[j]<=(N-5)/i;j++){st[i*prime[j]]=true;if(i%prime[j]==0){break;}}}
}int main()
{init();bool flag=true;int n,k,pos,m=0;scanf("%d%d",&n,&k);if(n<=2) {puts("0");return 0;}for(int i=1;prime[i]<=n;i++){m++;if(prime[i]-prime[i-1]>k+1)//如果有距离大于k+1,FFF就输了 {flag=false;}}if(n-prime[m]>k) {puts("0");return 0;}//如果第一步FFF都跳不了 if(flag)//FFF可以赢{// puts("9");//FFF可以赢,那么每次选k的时候会尽量多选些质数.int wz,ans=0;while(1){wz=n-k;int xb=lower_bound(prime,prime+m,wz)-prime;//找第一个大于等于wz的质数,也就是离n最远的质数 ans++;//FFF操作完毕 if(prime[xb]<=3) break;//如果当前点小于等于3,GGG就输掉比赛 n=prime[xb]-1;//GGG所跳点 ans++;//GGG操作完毕 }printf("%d\n",ans);}else//GGG可以赢{// cout<<prime[pos]<<endl;int wz,ans=0;int cnt=m;if(n==prime[m])//如果起点就是质数 {if(n<=prime[m-1]+k) cnt--;//如果第一步FFF可以走的话 else {puts("0");return 0;}}while(1){if(n<=prime[cnt]+k)//如果FFF可以走 {n=prime[cnt];//FFF走一步 }else break;ans++;int wz=n-k; int xb=upper_bound(prime,prime+m,wz)-prime;//找第一个大于n-k的质数,也就是离n最近的质数 n=prime[xb]-1;//GG正好走到prime[xb]-1(也就是素数的前一个位置来恶心FFF) cnt=xb-1;//FFF下一个最近的质数是第xb-1位(因为xb位被GGG给“完美错过”) ans++;}if(ans) printf("%d\n",-ans);else    puts("0");}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P6628-[省选联考 2020 B 卷] 丁香之路【欧拉回路,最小生成树】

正题 题目链接:https://www.luogu.com.cn/problem/P6628 题目大意 给出nnn个点的一张完全无向图&#xff0c;i∼ji\sim ji∼j的边权是∣i−j∣|i-j|∣i−j∣。 然后给出mmm条必经边&#xff0c;和起点sss。 求对于每个终点经过所有必经边的最短路径。 1≤n≤2500,0≤m≤n(n…

ASP.NET Core 实战:使用ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目

一、前言这几年前端的发展速度就像坐上了火箭&#xff0c;各种的框架一个接一个的出现&#xff0c;需要学习的东西越来越多&#xff0c;分工也越来越细&#xff0c;作为一个 .NET Web 程序猿&#xff0c;多了解了解行业的发展&#xff0c;让自己扩展出新的技能树&#xff0c;对…

【CF1199 D,E, F】Welfare State // Matching vs Independent Set // Rectangle Painting 1

2019-08-15下午三道练习题CF1199 思路有点难想 but很好实现 这是原网站链接&#xff1a;传送门 这里只完成D, E, F三题 文章目录D&#xff1a;Welfare State题目大意正解瞅瞅代码E:Matching vs Independent Set题目大意正解代码实现F:Rectangle Painting 1题目大意正解代码实现…

YBTOJ:前缀匹配(AC自动机)

文章目录题目描述解析代码题目描述 解析 做的不错 把trie树真的当成一棵树递归即可 注意一个标记时的问题&#xff1a; void AC(){int lstrlen(s01),pl1;for(int i1;i<l;i){int aask(s0[i]);pltr[pl][a];int kpl;while(k>1){if(ok[k]) break;//注意&#xff01;ok[k]1;…

[HAOI2006]均分数据

[HAOI2006]均分数据 题解&#xff1a; 题目稍微解释一下&#xff1a; 把n个数以分为m组&#xff0c;计算每一组的和&#xff0c;求得到的这m个数的方差。由于分法是任意的&#xff0c;我们要求这些方差中的最小值 我们先用STL中的函数random_shuffle()用来对一个元素序列进行…

开机指南

有些博客上了密码&#xff0c;密码是一个 \(100\) 以内的数字(与ACwisher有关) 腾讯QQ PC版 Notepad Div-c 编译选项&#xff1a; -Wl,--stack1024000000 -Wall -lm -O2 -stdc14 // Author:A weak man named EricQian #include<bits/stdc.h> using namespace std; #defin…

Docker最全教程——从理论到实战(八)

在本系列教程中&#xff0c;笔者希望将必要的知识点围绕理论、流程&#xff08;工作流程&#xff09;、方法、实践来进行讲解&#xff0c;而不是单纯的为讲解知识点而进行讲解。也就是说&#xff0c;笔者希望能够让大家将理论、知识、思想和指导应用到工作的实际场景和实践之中…

CF5E-Bindian Signalizing【单调栈】

正题 题目链接:https://www.luogu.com.cn/problem/CF5E 题目大意 圆上有nnn个山&#xff0c;两个山之间可以看到当且仅当它们之间的两条弧中有一条满足所有山都不高于它们两个。 求可以看到的山的对数。 3≤n≤106,1≤hi≤1093\leq n\leq 10^6,1\leq h_i\leq 10^93≤n≤106,…

不定方程(质数与因数)

文章目录题目描述解析代码题目描述 数据范围有误&#xff01;应该是不超过1e6 解析 容易推出&#xff1a; y&#xff08;x∗*∗n!)/(x-n!) 换元&#xff0c;令tx-n&#xff01; 则&#xff1a; yn!(n!)2/t 因为x、y都与t一一对应 所以本题就是求 (n!)2 的因数个数 我们求出n&…

Matlab快速入门

命令行窗口 clc 清屏 clear 清理变量 常用矩阵&#xff1a; x[0:2] 这是转置符号xlinspace(0,2,5) 从0到2分配5个空间xzeros(2,3)两行三列全为0的矩阵、 ones(2)2行2列全为1的方阵 eye(2)单位阵 rand(1,2)产生一行二列的随机数&#xff08;从0到1之间均匀随机数&#xff09;固…

【CF 1191】Tokitsukaze, CSL and Stone Game//Tokitsukaze and Duel//Tokitsukaze and Strange Rectangle

很难想 but很好实现 博弈论专练 传送门 惯例这里只完成D&#xff0c;E&#xff0c;F 话不多说上代码 文章目录D:Tokitsukaze, CSL and Stone Game题目大意题解代码实现E&#xff1a;Tokitsukaze and Duel题目大意题解代码实现E:Tokitsukaze and Strange Rectangle题目大意题解代…

主席树 - 可持久化线段树

模板 P3834 【模板】可持久化线段树 2(主席树) 区间求第 \(k\) 大 模板代码 #include<bits/stdc.h> using namespace std; #define Maxn 200005 typedef long long ll; inline int rd() {int x0;char ch,t0;while(!isdigit(ch getchar())) t|ch-;while(isdigit(ch)) xx*…

【.NET Core项目实战-统一认证平台】第十一章 授权篇-密码授权模式

上篇文章介绍了基于Ids4客户端授权的原理及如何实现自定义的客户端授权&#xff0c;并配合网关实现了统一的授权异常返回值和权限配置等相关功能&#xff0c;本篇将介绍密码授权模式&#xff0c;从使用场景、源码剖析到具体实现详细讲解密码授权模式的相关应用。.netcore项目实…

CF11D-A Simple Task【状压dp】

正题 题目链接:https://www.luogu.com.cn/problem/CF11D 题目大意 给出nnn个点mmm条边的一张简单无向图&#xff0c;求它的简单环的个数。 1≤n≤191\leq n\leq 191≤n≤19 解题思路 首先算重的问题很麻烦但也是解决这题的关键。 因为防止算重那么我们就只考虑在每个环编号…

YBTOJ:灯光控制(贪心)(公倍数)(暴力枚举)

文章目录题目描述解析代码题目描述 解析 没有想出来 首先可以确定开关要么开一次&#xff0c;要么不动&#xff0c;其他都和这俩是等价的 一开始最先想到的就是贪心的方法&#xff0c;每个开关遍历&#xff0c;如果按下会使答案变好就按下。 但是显然当前的开闭对后面是有后效…

Tree Constructer

题目&#xff1a; 题意&#xff1a; 如果点x和y有连边&#xff0c;当且仅当a[x] or a[y] 260 - 1 &#xff08;两者是充分必要&#xff09; 现在给你边的关系&#xff0c;问你每个点的值应该是多少&#xff1f;&#xff08;给出一种情况即可&#xff09; 题解&#xff1a; …

[USACO19JAN,Platinum]Train Tracking 2

虽然是简单的dp &#xff0c;but真的太难想到了&#xff0c;而且我的码力。。。 Train Tracking 2 【题目描述】 每天特快列车都会经过农场。列车有N节车厢&#xff08;1≤N≤105&#xff09;&#xff0c;每节车厢上有一个1到109之间的正整数编号&#xff1b;不同的车厢可能会…

轻重链剖分

重链剖分 P3384 【模板】轻重链剖分/树链剖分 $ / $ 模板代码&#xff1a; 注意&#xff1a; 如果有 \(0\) 号节点&#xff0c;并默认重儿子是零号节点&#xff0c;复杂度会退化为 \(O(n^2)\) 。原因&#xff1a; 代码第一次遍历默认重儿子是0&#xff0c;所以无法保证每次找到…

CF19E-Fairy【树形结构,差分】

正题 题目链接:https://www.luogu.com.cn/problem/CF19E 题目大意 给出nnn个点mmm条边的一张无向图&#xff0c;求有多少条边去掉后可以使得图变成一张二分图。 1≤n,m≤1041\leq n,m\leq 10^41≤n,m≤104 解题思路 虽然线段树分治可以暴力草过去但是考虑点智慧的做法。 众…

.netcore 堆栈调用方法小记

1|0背景上午临近午饭时&#xff0c;公司同事反馈验证码被攻击灌水。我们匆忙查询验证码明细&#xff0c;对已频繁出现的IP插入黑名单&#xff0c;但IP仍然隔断时间频繁变动&#xff0c;不得已之下只能先封禁对应公司id的验证码发送功能。年初时候&#xff0c;专门对SSO站点的发…