题意

有一个密码箱,\(0\)到\(n-1\)中的某些整数是它的密码。如果\(a\)和\(b\)都是它的密码,那么\((a+b)%n\)也是它的密码(\(a,b\)可以相等)。某人试了\(k\)次密码,前\(k-1\)次都失败了,最后一次成功了。该密码箱最多有多少不同的密码。

分析

假设集合\(s\)为答案,则令\(g=gcd(s_i)\),则显然\(kg, k \ge 0\)都是答案。一共有\(\frac{n}{g}\)个。
所以我们找一个最小的\(g\),满足\(g|n, g|a_n, g \nmid a_i(i < n)\)即可。

题解

首先求出\(g=gcd(n, a_n)\)的所有约数。首先将等于\(a_i(i < n)\)的约数去掉,然后从小到大枚举。如果\(b_i * p_j\)被去掉了,显然\(b_i\)也要被去掉。然后一直做下去就行了。复杂度\(O(n^{0.5}log^2n)\)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll getint() {ll x=0;int c=getchar();for(; c<48||c>57; c=getchar());for(; c>47&&c<58; x=x*10+c-48, c=getchar());return x;
}
const int M=1000005, N=250005;
inline ll gcd(ll a, ll b) {return b?gcd(b, a%b):a;
}
ll a[N], b[M], c[M], n;
int K, cnt, tot;
bool no[M];
int main() {ll n=getint();int K=getint();for(int i=1; i<=K; ++i) {a[i]=getint();}ll g=gcd(a[K], n), z;for(z=1; z*z<g; ++z) {if(g%z==0) {b[tot++]=z;b[tot++]=g/z;}}if(z*z==g) {b[tot++]=z;}sort(b, b+tot);ll t=g;for(z=2; z*z<=t; ++z) {if(t%z==0) {c[cnt++]=z;for(t/=z; t%z==0; t/=z);}}if(t!=1) {c[cnt++]=t;}for(int i=1; i<K; ++i) {ll x=gcd(a[i], g);no[lower_bound(b, b+tot, x)-b]=1;}for(int i=tot-1; i>=0; --i) {if(no[i]) {continue;}ll x=b[i];for(int j=0; j<cnt && x<=g/c[j]; ++j) {ll y=x*c[j];int k=lower_bound(b, b+tot, y)-b;if(b[k]==y && no[k]) {no[i]=1;break;}}}for(int i=0; i<tot; ++i) {if(!no[i]) {printf("%lld\n", n/b[i]);return 0;}}return 0;
}

转载于:https://www.cnblogs.com/iwtwiioi/p/4985737.html

【BZOJ】2277: [Poi2011]Strongbox相关推荐

  1. 【BZOJ】1707: [Usaco2007 Nov]tanning分配防晒霜

    [算法]贪心扫描线(+堆) [题意]给定n头牛有区间[a,b],m个防晒霜值为ai,每个可以使用bi次,每次可以使包含它的区间涂到防晒霜,问最多被涂牛数. [题解] 参考:[bzoj1707]: [U ...

  2. 【BZOJ】【1041】【HAOI2008】圆周上的点

    数学 orz hzwer 完全不会做-- 很纠结啊,如果将来再遇到这种题,还是很难下手啊-- 引用题解: [分析]: 样例图示: 首先,最暴力的算法显而易见:枚举x轴上的每个点,带入圆的方程,检查是否 ...

  3. 【BZOJ】【1036】树的统计

    嗯这题是一道对树进行动态修改&查询的经典题目,可以拿来练习树链剖分~ 啊对于这种动态修改&查询的题目,我们最喜闻乐见的就是在一个序列上去做了,毕竟可以直接套各种数据结构模版啊,比如线段 ...

  4. 【BZOJ】【3442】学习小组

    网络流/费用流 orz zyf 裸的费用流,根据题目描述即可建出如下的图: S->i 费用表示每有一个加入第 i 个小组的学生,需要花的钱,由于是跟流量(人数)的二次方相关,所以要拆边--然后每 ...

  5. 【BZOJ】1711: [Usaco2007 Open]Dining吃饭

    [算法]最大流 [题解] S连向食物连向牛连向牛'连向饮料连向T. 经典的一个元素依赖于两个元素的建图方式. #include<cstdio> #include<algorithm& ...

  6. 【BZOJ】2099: [Usaco2010 Dec]Letter 恐吓信

    [题意]给定长度为n和m的两个字符串S和T,要求在字符串S中取出若干段拼成T(可重复取),求最小段数,n,m<=50000. [算法]后缀自动机 || 后缀数组 [题解]对串S建SAM,然后在上 ...

  7. 【BZOJ】1299: [LLH邀请赛]巧克力棒

    [算法]博弈论 [题解]这道题不是典型的SG函数题了. 不把它当成游戏看待,那么这道题是在说n个石子堆,每次可以加入若干个或进行Nim游戏. 我们当前先手,则考虑构造必败态来获胜. 当前已加入的NIm ...

  8. 【BZOJ】1013 [JSOI2008]球形空间产生器sphere

    [算法]高斯消元 [题解] 建矩阵; for i 找到同列绝对值最大数字; 交换; for k(行) j(列)(倒序)   除法; for i(倒序) for j 减去已知元素 除到右边; #incl ...

  9. 【BZOJ】4032: [HEOI2015]最短不公共子串(LibreOJ #2123)

    [题意]给两个小写字母串A,B,请你计算: (1) A的一个最短的子串,它不是B的子串 (2) A的一个最短的子串,它不是B的子序列 (3) A的一个最短的子序列,它不是B的子串 (4) A的一个最短 ...

最新文章

  1. “cvSnakeImage”: 找不到标识符
  2. 成都python工作-成都python就业
  3. tableau做rfm分析_RFM模型客户关系管理
  4. 【Mysql】MySQL event 计划任务
  5. html手机pc不同页面,PC端和手机端如何同时生成静态页
  6. 会话创建过程-创建Executor
  7. 第二十一章:变换(三)
  8. IntelliJ IDEA 2020.1 快速查找文件
  9. 导入数据库时报错1067 – Invalid default value for ‘字段名’
  10. 从初创型到独角兽企业,监控架构演进的那些事儿
  11. 异步udpserver接收rtp转html5(一)
  12. markdown与latex:数学符号远远大于\gg和远远小于书写\ll
  13. 微星X79主板修改BIOS支持NVMe
  14. python阈值分割_Python实现otsu阈值分割算法
  15. 一元云购指定中奖版源码(开源+PC+移动端)
  16. python输出日历_python输出指定月份日历的方法
  17. JS中国标准时间格式转换字符串
  18. IDEA必装插件-Gyro(强烈推荐)
  19. 文件储存器 - IP通讯技术
  20. 舞象云出席泰华商城智慧营销系统上线发布会,问道传统百货新未来

热门文章

  1. 牛人网站和博客---站得高看得更远(CV类)
  2. python财政收入预测分析_Python:Lasso方法、GM预测模型、神经网络预测模型之财政收入影响因素分析及预测...
  3. Linux c使用gumbo库解析页面表单信息(二)
  4. python最快多久学会,python学成需要多久
  5. 演进式架构学习笔记(一):架构评估及适应度函数
  6. 21天学Python --- 打卡2:Regular Expression
  7. 计算机辅助手段在英语教学中使用,试谈计算机在英语教学中的辅助作用
  8. linux升级内核ivh,Linux内核升级
  9. 如何给多个Word文档创建一个有连续页码的目录
  10. 工作流模式每个工作流引擎都会支持多种方式的表单。目前大家讨论到的大概有三种。 动态表单 外置表单 普通表单