第一题 点指兵兵

提交文件: bing.cpp

输入文件: bing.in

输出文件: bing.out

时间空间限制: 1 秒, 256 MB

你一定有过在两个物品之间犹豫不决的时候,想要借助一些方法帮你随机选择。在广东,有一种方法叫”点指兵兵”,即一开始用手指指向一个物品,然后念” 点指兵兵点到谁人做大兵”,从第二个字开始,每念一个字,手指就移动到另一个物品上。整句话念完,手指指向谁,你就选择谁。

但很快你就发现,这个方法是有问题的——你最终指向的物品一定是你一开始指向的物品,这严重破坏了这个方法的随机性。后来你学了信息学,你更加清楚这个规律了,咒语长度是奇数的时候最终指向跟初始指向相同,咒语长度是偶数的时候最终指向跟初始指向不同。

所以解决的方法有这么几种:

  • 增加咒语长度,可以念一句很长很长的句子,长到你也数不清是奇数还是偶数。
  • 增加物品数量,只有两个物品的话规律太多,多一些物品也就少一些规律。

    因此现在你面对的问题是这样的:有若干个物品(至少 \(3\) 个)排成一圈,你要念一句长度为 \(n (n ≥ 3)\) 的咒语,一开始手指指向任意一个物品,从第二个字开始,每念一个字,手指移动到顺时针的下一个物品。如果最终指向的物品不是初始指向的物品,也不是与初始物品相邻的物品,那么就认为这个选择是比较随机的。

给定 \(n\),你想知道 \(3, \cdots , n\) 这些数字有多少个作为物品数量的时候,选择是比较随机的。

输入格式

本题每个测试点有多组测试数据。

第一行一个整数 T,表示数据组数。

接下来 T 行,每行一个整数 n,表示咒语长度。

输出格式

共 T 行,每行一个整数,表示有多少种可能的物品数量,使得这个咒语造成的选择是比较随机的。

样例数据

2
7
11
1
4

样例解释

n = 7 时,咒语可以是” 我爱 GDKOI”,只有物品数量为 4 时,最终指向物品不同于初始物品且不与初

始物品相邻。

n = 11 时,咒语可以是” 点指兵兵点到谁人做大兵”,物品数量为 4, 6, 7, 8 时符合要求。

数据范围

对于所有测试点,\(3 ≤ n ≤ 2 × 10^9,1 ≤ T ≤ 5\)。

测试点 \(T ≤\) \(n ≤\) 特殊限制
1 ∼ 3 5 $1000 $
4 ∼ 8 5 \(10^5\)
9 5 $ 2 × 10^9$ n 与 n − 2 都是质数
10 5 $ 2 × 10^9$

首先考虑物品数量在什么条件下会不符合要求。很明显,如果\(n\equiv 0,1,2\pmod{x}\)时,\(x\)不合法。也就是说,如果\(x\)是\(n-1,n-2,n\)的因数,那么\(x\)不合法。由于\(n\)和\(n-2\)的差距为2,所以在\(3\cdots n\)中没有重复的因数。因数是成对出现的,所以排除掉一个x还要排除掉\(n-x\)。

但是还是要多排除一些可能。首先如果\(n\)是偶数,排除\(n\div2\)和\((n-2)\div2\),否则排除\((n-1)\div2\),还要排除\(n,n-1,n-2\)三个数本身。

方法在\(n\le6\)时会排除出现重复,所以要特判。

#include<cstdio>
const int M=6e6+5;
int t,n,cnt;
void calc(int x,int y)
{
if(!(y%x))
{
if(x*x==y)
++cnt;
else
cnt+=2;
}
}
int main()
{
// freopen("bing.in","r",stdin);
/// freopen("bing.out","w",stdout);
scanf("%d",&t);
while(t--)
{
scanf("%d",&n),cnt=0;
if(n<7)
{
printf("0\n");
continue;
}
for(int i=3;i*i<=n;i++)
{
calc(i,n);
calc(i,n-1);
calc(i,n-2);
}
if(n%2==0)
cnt+=2;
else
cnt++;
printf("%d\n",n-5-cnt);
}
return 0;
}

[GDOIpj222A] 点指兵兵的更多相关文章

  1. 【总结】2022GDOI普及组试题与题解(缺两天的T4)

    标签 2022 广东省选普及组 GDOI 试题 前往Luogu下载 Luogu下载:This Day1题解 T1 邹忌讽齐王纳谏 打卡题,建议模拟 建议使用map,时间复杂度为\(O(nlogn)\) ...

随机推荐

  1. 半导体行业通信标准SECS/GEM协议一看就懂的

    半导体行业通信标准SECS/GEM透析 HSMS通信的设备端通常为客户端(Equipment)(也可称为Active 在通信中主动连接对方的),工厂会部署服务端(Host)(也可称为Passive 被 ...

  2. AI绘画工具MJ新功能有点东西,小白也能轻松一键换装

    先看最终做出来的效果 直接来干货吧.Midjourney,下面简称MJ 1.局部重绘功能来袭 就在前两天,MJ悄咪咪上线了这个被众人期待的新功能:局部重绘. 对于那些追求创新和个性化的设计师来说,局部 ...

  3. 【Java监控】使用SkyWalking监控Java服务

    你的Java服务是如何监控的呢? 1.Null:监控?什么监控?我一个写代码的服务挂了跟我有什么关系? 2.命令行:服务挂了?内存泄漏?jstat jmap jcmd,还好不是我写的 3.撸代码:Ja ...

  4. .NET Core WebAPI 基础 文件上传

    昨天分享了一个在WebApi中如何接收参数的文章 .NET API 中的 FromRoute.FromQuery.FromBody 用法 - 一事冇诚 - 博客园 (cnblogs.com),然后有新 ...

  5. Mysql基础9-事务

    一.事务简介 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有操作作为一个整体一起向系统提交或者撤销操作请求,即这些操作要么同时成功,要么同时失败.mysql的事务默认是自动提交的,也就 ...

  6. 探索API接口:从概念到实践

    在当今数字化时代,API(Application Programming Interface)接口成为了各种应用程序之间实现数据交互和功能集成的关键.无论是开发一个网站.构建一个移动应用还是进行数据分 ...

  7. iOS开发过程中的内存监控

  8. springboot打包与依赖包分离

    前言: springboot项目部署时,需要本地打包成一个jar放到服务器进行部署(使用jenkins自动打包部署同理),部署包里包含了其它所有依赖包,整个包会比较大,小则几M,大则几十上百. 正文: ...

  9. PanGu-Coder2:从排序中学习,激发大模型潜力

    本文分享自华为云社区<PanGu-Coder2:从排序中学习,激发大模型潜力>,作者: 华为云软件分析Lab . 2022年7月,华为云PaaS技术创新Lab联合华为诺亚方舟语音语义实验室 ...

  10. windows10 jdk下载及环境配置

     一.环境准备 windows10 系统 jdk 各种版本(配置大同小异) 二.下载并安装jdk 下载地址:http://www.oracle.com/technetwork/java/javase/ ...