【BZOJ】2277: [Poi2011]Strongbox
题意
有一个密码箱,\(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相关推荐
- 【BZOJ】1707: [Usaco2007 Nov]tanning分配防晒霜
[算法]贪心扫描线(+堆) [题意]给定n头牛有区间[a,b],m个防晒霜值为ai,每个可以使用bi次,每次可以使包含它的区间涂到防晒霜,问最多被涂牛数. [题解] 参考:[bzoj1707]: [U ...
- 【BZOJ】【1041】【HAOI2008】圆周上的点
数学 orz hzwer 完全不会做-- 很纠结啊,如果将来再遇到这种题,还是很难下手啊-- 引用题解: [分析]: 样例图示: 首先,最暴力的算法显而易见:枚举x轴上的每个点,带入圆的方程,检查是否 ...
- 【BZOJ】【1036】树的统计
嗯这题是一道对树进行动态修改&查询的经典题目,可以拿来练习树链剖分~ 啊对于这种动态修改&查询的题目,我们最喜闻乐见的就是在一个序列上去做了,毕竟可以直接套各种数据结构模版啊,比如线段 ...
- 【BZOJ】【3442】学习小组
网络流/费用流 orz zyf 裸的费用流,根据题目描述即可建出如下的图: S->i 费用表示每有一个加入第 i 个小组的学生,需要花的钱,由于是跟流量(人数)的二次方相关,所以要拆边--然后每 ...
- 【BZOJ】1711: [Usaco2007 Open]Dining吃饭
[算法]最大流 [题解] S连向食物连向牛连向牛'连向饮料连向T. 经典的一个元素依赖于两个元素的建图方式. #include<cstdio> #include<algorithm& ...
- 【BZOJ】2099: [Usaco2010 Dec]Letter 恐吓信
[题意]给定长度为n和m的两个字符串S和T,要求在字符串S中取出若干段拼成T(可重复取),求最小段数,n,m<=50000. [算法]后缀自动机 || 后缀数组 [题解]对串S建SAM,然后在上 ...
- 【BZOJ】1299: [LLH邀请赛]巧克力棒
[算法]博弈论 [题解]这道题不是典型的SG函数题了. 不把它当成游戏看待,那么这道题是在说n个石子堆,每次可以加入若干个或进行Nim游戏. 我们当前先手,则考虑构造必败态来获胜. 当前已加入的NIm ...
- 【BZOJ】1013 [JSOI2008]球形空间产生器sphere
[算法]高斯消元 [题解] 建矩阵; for i 找到同列绝对值最大数字; 交换; for k(行) j(列)(倒序) 除法; for i(倒序) for j 减去已知元素 除到右边; #incl ...
- 【BZOJ】4032: [HEOI2015]最短不公共子串(LibreOJ #2123)
[题意]给两个小写字母串A,B,请你计算: (1) A的一个最短的子串,它不是B的子串 (2) A的一个最短的子串,它不是B的子序列 (3) A的一个最短的子序列,它不是B的子串 (4) A的一个最短 ...
最新文章
- “cvSnakeImage”: 找不到标识符
- 成都python工作-成都python就业
- tableau做rfm分析_RFM模型客户关系管理
- 【Mysql】MySQL event 计划任务
- html手机pc不同页面,PC端和手机端如何同时生成静态页
- 会话创建过程-创建Executor
- 第二十一章:变换(三)
- IntelliJ IDEA 2020.1 快速查找文件
- 导入数据库时报错1067 – Invalid default value for ‘字段名’
- 从初创型到独角兽企业,监控架构演进的那些事儿
- 异步udpserver接收rtp转html5(一)
- markdown与latex:数学符号远远大于\gg和远远小于书写\ll
- 微星X79主板修改BIOS支持NVMe
- python阈值分割_Python实现otsu阈值分割算法
- 一元云购指定中奖版源码(开源+PC+移动端)
- python输出日历_python输出指定月份日历的方法
- JS中国标准时间格式转换字符串
- IDEA必装插件-Gyro(强烈推荐)
- 文件储存器 - IP通讯技术
- 舞象云出席泰华商城智慧营销系统上线发布会,问道传统百货新未来
热门文章
- 牛人网站和博客---站得高看得更远(CV类)
- python财政收入预测分析_Python:Lasso方法、GM预测模型、神经网络预测模型之财政收入影响因素分析及预测...
- Linux c使用gumbo库解析页面表单信息(二)
- python最快多久学会,python学成需要多久
- 演进式架构学习笔记(一):架构评估及适应度函数
- 21天学Python --- 打卡2:Regular Expression
- 计算机辅助手段在英语教学中使用,试谈计算机在英语教学中的辅助作用
- linux升级内核ivh,Linux内核升级
- 如何给多个Word文档创建一个有连续页码的目录
- 工作流模式每个工作流引擎都会支持多种方式的表单。目前大家讨论到的大概有三种。 动态表单 外置表单 普通表单