Calling Extraterrestrial Intelligence Again POJ 1411
题目链接:http://poj.org/problem?id=1411
题目大意:找两个素数p,q满足a/b<=p/q<=1 且p*q<=m,求p*q最大的一组素数对。
第一次想的是筛素数,然后枚举,后来发现没有超时(汗,这让我们写正解的很GG)。
正解是先筛素数,然后用mul数组对于两个素数的积存下较小的那个素数。最后从m向下枚举。
枚举代码:
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxm = 50000;
int prime[6000], cnt, m, a, b;
bool flag[maxm+5];
void pre()
{
for(int i=2;i<=50000;i++)if(!flag[i])
{prime[++cnt]=i;
for(int j=i*i;j<=maxm&&j>0;j+=i)//j可能会溢出
flag[j]=1;
}
return ;
}
int main()
{
pre();
while(scanf("%d%d%d",&m,&a,&b),m|a|b)
{
int ans1=0,ans2=0;
for(int i=1;i<=cnt;i++)
for(int j=i;j<=cnt;j++){
int p=prime[i],q=prime[j];
if(a*q<=b*p&&p*q<=m){
if(p*q>ans1*ans2)
ans1=p,ans2=q;
}
else break;
}
printf("%d %d\n",ans1,ans2);
}
}
正解代码:
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxm = 100000;
int prime[10000], cnt, m, a, b, mul[maxm+5];
bool flag[maxm+5];
void pre()
{
for(int i=2;i<=maxm;i++)if(!flag[i])
{prime[++cnt]=i;
for(int j=i*i;j<=maxm&&j>0;j+=i)//j可能会溢出
flag[j]=1;
for(int j=1;j<=cnt;j++){
if(prime[j]*prime[cnt]>maxm) break;
mul[prime[j]*prime[cnt]]=prime[j];
}
}
}
int main()
{
pre();
while(scanf("%d%d%d",&m,&a,&b),m|a|b)
{
for(int i=m;i>=1;i--){
if(!mul[i]) continue;
int p=mul[i],q=i/p;
if(a*q<=b*p){
printf("%d %d\n",p,q);break;
}
}
}
}
Calling Extraterrestrial Intelligence Again POJ 1411的更多相关文章
- poj 1411 Calling Extraterrestrial Intelligence Again(超时)
Calling Extraterrestrial Intelligence Again Time Limit: 1000MS Memory Limit: 65536K Total Submissi ...
- hdu 1239 Calling Extraterrestrial Intelligence Again (暴力枚举)
Calling Extraterrestrial Intelligence Again Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- HDUOJ-----(1329)Calling Extraterrestrial Intelligence Again
Calling Extraterrestrial Intelligence Again Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- poj 1411 Calling Extraterrestrial Intelligence Again
题意:给你数m,a,b,假设有数p,q,满足p*q<=m同时a/b<=p/q<=1,求当p*q最大的p和q的值 方法:暴力枚举 -_-|| and 优化范围 我们可以注意到在某一个m ...
- 【HDOJ】1239 Calling Extraterrestrial Intelligence Again
这题wa了很多词,题目本身很简单,把a/b搞反了,半天才检查出来. #include <stdio.h> #include <string.h> #include <ma ...
- 【noi 2.7_413】Calling Extraterrestrial Intelligence Again(算法效率--线性筛素数+二分+测时)
题意:给3个数M,A,B,求两个质数P,Q.使其满足P*Q<=M且A/B<=P/Q<=1,并使P*Q最大.输入若干行以0,0,0结尾. 解法:先线性筛出素数表,再枚举出P,二分出对应 ...
- 穷举(四):POJ上的两道穷举例题POJ 1411和POJ 1753
下面给出两道POJ上的问题,看如何用穷举法解决. [例9]Calling Extraterrestrial Intelligence Again(POJ 1411) Description A mes ...
- POJ 1411
#include<iostream> #include<stdio.h> #include<math.h> #define MAXN 50000 using nam ...
- 杭电ACM分类
杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ...
随机推荐
- CF1016D Vasya And The Matrix
题目描述 我们有一个 n * m 的矩阵,现在我会告诉你每一行和每一列的异或和请求出任意一种可能的矩阵 数据范围 1<=n,m<=100输入数据确保在int范围内 输入输出格式: 输入格式 ...
- jQuery框架"风云榜"案例
<title>电影风云榜</title> <style> /*清空默认样式*/ *{padding:0;margin:0;border:0;list-style:n ...
- mysql_新建表:主键、外键等
序号 命令(中文) 命令(英文呢) 解释 示例 备注 1 主键约束 primary key 不能重复,不能为空 学号 2 外键约束 foreign key 可以重复,依赖主键 学号 3 非空约束 no ...
- 使用Jenkins自带功能(不用shell)构建Docker镜像并推送到远程仓库
意义: 一开始实现这个目的是在Jenkins中使用的shell脚本,也就是如下的这个: bash # 进入到生成jar包的根目录 cd ${WORKSPACE}/${module_filename} ...
- TCP协议(下)
TCP滑动窗口 发送端 LastByteAcked:第一部分和第二部分的分界线 LastByteSent:第二部分和第三部分的分界线 LastByteAcked + AdvertisedWindow: ...
- jquery获取窗口和文档的高度和宽度
整个可视区域的宽度和高度(会随着浏览器窗口大小改变而改变): $(window).width()和$(window).height() 整个文档的宽度和高度(不变): $(docoument).wid ...
- .NET Core 中三种模式依赖注入的生命周期。
注入模式 同一个请求作用域 不同的请求作用域 AddSingleton 同一个实例 同一个实例 AddScoped 同一个实例 新实例 AddTransient 新实例 新实例
- 翻译 API
Request http://fy.iciba.com/ajax.php?a=fy&f=auto&t=auto&w=love Pre 英译汉 Request http://fy ...
- Java调用Http/Https接口(1)--编写服务端
Http接口输入的数据一般是键值对或json数据,返回的一般是json数据.本系列文章主要介绍Java调用Http接口的各种方法,本文主要介绍服务端的编写,方便后续文章里的客户端的调用.文中所使用到的 ...
- JavaScript常见的输出方式
1.通过弹窗的形式来输出 alert(需要输出的内容); alert("hello world"); confirm(需要输出的内容); prompt("请输入内容:&q ...