【数学】Codeforces Round #470 (Div2) B
题目链接:http://codeforces.com/contest/948/problem/B
题目大意:有一个大于等于3的数X0,任意选择一个小于X0的质数P0,乘以一个数k使k*P0>=X0,且(k-1)*P0<X0,令X1=k*P0,任意选择一个小于X1的质数P1,乘以一个数u使u*P1>=X1,且(u-1)*P1<X1,令X2=u*P1;现在给你X2,求出所有满足条件的X0里最小的那一个。
解题思路:
绕,超级绕。
我一开始读题目的时候就觉得这道题很绕完全搞不清楚大小关系,经过神级学长的耐心讲解终于搞懂了,此处%红太阳。
首先我想到的是暴力解法,枚举出所有的X1,再枚举出X1最大的质因数,X1-P+1的最小值即为解。于是我们来算一下时间复杂度。枚举所有的X1->O(n),枚举出X1最大的质因数->O(sqrt(n)),n的范围在1e6,果断T。
于是寻找更省时间的方法,不用枚举X1或者不用枚举X1的质因数。
我们探究一下X1和X2的关系,发现如果从X2着手,是可以确定X1的范围的。X2等于一个小于等于X1的质数乘以一个正数,不妨设这个质数为P,那么X2-P<X1<=X2,右区间是固定死了的X2,左区间的最小值在P取最大值的时候取到。所以X1的范围是[X2-X2最大的质因数+1,X2]。
似乎没有什么用,还是要枚举,但是如果我们已知了X0呢?
假设我们有一个满足条件的X0,一定可以找到一个X1>=X0且处于这个区间(因为保证了X0是满足条件的一个解)。这个X1是如何找到的?一个小于等于X0的质数乘以一个正数!也就是说,对于任意大于X0且小于等于X2的数X0',这个质数都存在,那么这个X1也存在,那么当X1>=X0'的时候,我们X0‘也是合理解,当X1<X0'的时候,X0’必定处于这个区间!(X1处于这个区间,X0'小于等于X2)。而处于这个区间的所有数都是一个满足条件的X0(可以取自己的质因数乘以一个因子等于自己,那么X0==X1,X1处于区间内)。
于是我们得出结论:只要一个X0是满足条件的解,所有大于X0且小于等于X2的都是满足条件的解。
满足单调性->求最小->二分!
最后只要二分X0即可。
下面放31msAC代码:
#include<stdio.h>
#define MAXN 1000000 int prime[MAXN+],tot;
bool f[MAXN+]; int _max(int a,int b){return a>b?a:b;} void _before(){ int i,j;
for(i=;i<=MAXN;i++){
if(!f[i])prime[++tot]=i;
for(j=;j<=tot&&prime[j]*i<=MAXN;j++){
f[i*prime[j]]=true;
if(i%prime[j]==)break;
}
}
} int main(){ int x1,x2,l,r,i,mid,p;
bool flag;
_before();
scanf("%d",&x2);
if(!f[x2]){
printf("%d",x2);
return ;
}
for(i=tot;i>=;i--)
if(x2%prime[i]==)break;
p=prime[i];
l=; r=x2;
while(l<r){
if(l+==r)break;
mid=(l+r)>>;
flag=false;
for(i=;prime[i]<=mid;i++){
x1=(_max(mid,x2-p+)+prime[i]-)/prime[i]*prime[i];//取大于左端点的最小的数
if(x1-prime[i]<mid&&x1<=x2){
flag=true;
break;
}
}
if(flag)r=mid;
else l=mid;
}
printf("%d",r);
return ;
}
【数学】Codeforces Round #470 (Div2) B的更多相关文章
- Codeforces Round #539 div2
Codeforces Round #539 div2 abstract I 离散化三连 sort(pos.begin(), pos.end()); pos.erase(unique(pos.begin ...
- 【前行】◇第3站◇ Codeforces Round #512 Div2
[第3站]Codeforces Round #512 Div2 第三题莫名卡半天……一堆细节没处理,改一个发现还有一个……然后就炸了,罚了一啪啦时间 Rating又掉了……但是没什么,比上一次好多了: ...
- Codeforces Round#320 Div2 解题报告
Codeforces Round#320 Div2 先做个标题党,骗骗访问量,结束后再来写咯. codeforces 579A Raising Bacteria codeforces 579B Fin ...
- Codeforces Round #564(div2)
Codeforces Round #564(div2) 本来以为是送分场,结果成了送命场. 菜是原罪 A SB题,上来读不懂题就交WA了一发,代码就不粘了 B 简单构造 很明显,\(n*n\)的矩阵可 ...
- 贪心/数学 Codeforces Round #212 (Div. 2) A. Two Semiknights Meet
题目传送门 /* 贪心/数学:还以为是BFS,其实x1 + 4 * k = x2, y1 + 4 * l = y2 */ #include <cstdio> #include <al ...
- 数学 Codeforces Round #219 (Div. 2) B. Making Sequences is Fun
题目传送门 /* 数学:这题一直WA在13组上,看了数据才知道是计算cost时超long long了 另外不足一个区间的直接计算个数就可以了 */ #include <cstdio> #i ...
- Codeforces Round #361 div2
ProblemA(Codeforces Round 689A): 题意: 给一个手势, 问这个手势是否是唯一. 思路: 暴力, 模拟将这个手势上下左右移动一次看是否还在键盘上即可. 代码: #incl ...
- 数学 Codeforces Round #308 (Div. 2) B. Vanya and Books
题目传送门 /* 水题:求总数字个数,开long long竟然莫名其妙WA了几次,也没改啥又对了:) */ #include <cstdio> #include <iostream& ...
- Codeforces Round #626 Div2 D,E
比赛链接: Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics) D.Present 题意: 给定大 ...
随机推荐
- web项目中的 log4net的配置
最近用log4net,网上查了很多资料,照着网上的配置大多都不管用,可能我还是有什么地方配置的不对.看出来的朋友平指出.下面是我自己亲测的,可以用! 1.web项目中的web.config 配置log ...
- jQuery经典面试题及答案精选[转]
这两天有个面试,把这些记在这里. 问题:jQuery的美元符号$有什么作用? 回答:其实美元符号$只是”jQuery”的别名,它是jQuery的选择器,如下代码: $(document).ready( ...
- 【BZOJ】2301: [HAOI2011]Problem b
[题意]于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数.n,a,b,c,d,k<=50000. ...
- python学习笔记(十六)之文件
打开文件用open函数 open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=Tru ...
- 【leetcode 简单】第十六题 二进制求和
给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1" 输出: ...
- 二进制、十进制、十六进制(python)
int(“x”,base=2/8/16)是把x都转换成十进制 二进制: 1111=1*2的3次方+1*2的2次方+1*2的1次方+1*2的0次方 =8+4+2+1=15 1000=1*2的3次方+0 ...
- KS(Kolmogorov-Smirnov)(转)
来源:https://blog.csdn.net/u013421629/article/details/78217498 KS(Kolmogorov-Smirnov):KS用于模型风险区分能力进行评估 ...
- 【Tomcat】tomcat设置http文件下载,配置文件下载目录
tomcat作为http的下载服务器,网上有很多办法 但我认为最简单的是:(亲测有效) 1.直接把文件放在 /var/lib/tomcat6/webapps/ROOT 目录下, 2.然后在网址中访问: ...
- Opencv 配置VS2012
开始接触图像处理有一段时间了,经过前期的调研,和相关入门知识的学习,开始接触一些图像处理应用的工具.Opencv是一个图像处理的开源库,由于其开放的协议架构,国内外很多科研机构和团队都在基于openc ...
- offset宏的讲解【转】
转自:http://blog.csdn.net/tigerjibo/article/details/8299584 1.offset宏讲解 #define offsetof(TYPE, MEMBER) ...