【题解】【A % B Problem(P1865)】-C++
题目背景
题目名称是吸引你点进来的
实际上该题还是很水的
题目描述
区间质数个数
输入输出格式
输入格式:
一行两个整数 询问次数n,范围m
接下来n行,每行两个整数 l,r 表示区间
输出格式:
对于每次询问输出个数 t,如l或r∉[1,m]输出 Crossing the line
输入输出样例
输入样例#1:
2 5
1 3
2 6
输出样例#1:
2
Crossing the line
说明
【数据范围和约定】
对于20%的数据 1<=n<=10 1<=m<=10
对于100%的数据 1<=n<=1000 1<=m<=1000000 -10^9<=l<=r<=10^9 1<=t<=1000000
这道题主要考查的是有关素数的知识,基本方法可以去这里了解一下。
好的接下来说解法。
粗看数据范围:
???为什么还要在负数里面找质数
一看样例再读题目
Crossing the line不就是来处理这种情况的吗?直接打上if(l<1||r>m)cout<<"Crossing the line"<<endl;
我看到这道题的第一思路就是用上面那篇蓝色字点进去的博客里面的第三种方法(建议看一下),毕竟这个方法的时间复杂度是我在里面列举的三种方法中特别快的了!
然后我就打了下来去luogu上提交…
很明显,虽然第三种方法已经有了很快的速度,但是在特别构造的数据下,这种速度还是不够的!
那么,我们应该进行思考:
既然这道题目的查找次数最高可以达到1k,那么我们为什么不通过打标记和记录数字来快速得出答案呢?
在我的代码中,我用ans[i]来表示从1-i的范围内有多少个质数,那么代码实现就很简单了。
具体代码就贴在下面,有需要的自取:
#include<bits/stdc++.h>
using namespace std;
int p[1000010],ans[1000010];
bool ip[1000010];
int tot=0;
int main()
{
int n,m,l,r;
cin>>n>>m;
memset(ip,true,sizeof(ip));
ip[0]=0;ip[1]=0;ans[1]=0;
for(int i=2;i<=m;i++)
{
ans[i]=ans[i-1];
if(ip[i])
{
p[++tot]=i;
ans[i]=tot;
}
for(int j=1;j<=tot&&i*p[j]<=m;++j)
{
ip[i*p[j]]=false;
if(i%p[j]==0)break;
}
}
for(int i=1;i<=n;i++)
{
cin>>l>>r;
if(l<1||r>m) cout<<"Crossing the line"<<endl;
else cout<<ans[r]-ans[l-1]<<endl;
}
return 0;
}
ov.
【题解】【A % B Problem(P1865)】-C++的更多相关文章
- 【题解】Tree-String Problem Codeforces 291E AC自动机
Prelude 传送到Codeforces:(/ω\)--- (/ω•\) Solution 很水的一道题. 对查询的串建出来AC自动机,然后树上随便跑跑就行了. 为什么要写这篇题解呢? 我第一眼看到 ...
- P1832题解 A+B Problem(再升级)
万能的打表 既然说到素数,必须先打素数表筛出素数, 每个素数可以无限取,这就是完全背包了. 这次打个质数表: bool b[1001]={1,1,0,0,1,0,1,0,1,1,1,0,1,0,1,1 ...
- 题解:T103342 Problem A. 最近公共祖先
题目链接 题目大意 求每个点对的lca深度的和 以每一层分析,得出通式 由于1e9的数据范围要化简表达式得到O(能过) 瞎搞后就是2^(2n+2)-(4n+2)*2^n-2 code: #includ ...
- 暑假训练round 3 题解
今天做题运气出奇的好,除了几处小错误调试之后忘记改掉了……最后还AK了……虽然题目不难,学长也说是福利局,但是对个人的鼓励作用还是挺大的……至此暑假训练就结束了,也算没有遗憾……. 题解如下: Pro ...
- [Luogu 1919]【模板】A*B Problem升级版(FFT快速傅里叶)
Description 给出两个n位10进制整数x和y,你需要计算x*y. Input 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数为n的正整数y. Output 输出 ...
- HDU 5296 Annoying problem LCA+树状数组
题解链接 Annoying problem Time Limit: 16000/8000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/O ...
- Codeforces Round #198 (Div. 2)C,D题解
接着是C,D的题解 C. Tourist Problem Iahub is a big fan of tourists. He wants to become a tourist himself, s ...
- CF 407B Long Path[观察性质 DP]
B. Long Path time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- Codeforces Round #206 div1 C
CF的专业题解 : The problem was to find greatest d, such that ai ≥ d, ai mod d ≤ k holds for each i. Let ...
随机推荐
- LINQ查询表达式---------let子句
LINQ查询表达式---------let子句 let子句创建一个范围变量来存储结果,变量被创建后,不能修改或把其他表达式的结果重新赋值给它.此范围变量可以再后续的LINQ子句中使用. class P ...
- C#实现bitmap图像矫正
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Office Add-in Model 为 Outlook Mail Add-in 提供的 JavaScript API 介绍
本文所讨论的 Mailbox API是指在 Mail Add-in 中可调用的 JavaScript API.开发者可以利用这些API 实现 Add-in 和 Outlook 的交互(数据读取与写入) ...
- DirectX的替代品 SDL 简介
DirectX的替代品 SDL 简介 什么是SDL? 即 Simple DirectMedia Layer,使用 LGPL 许可证. 免费的跨平台多媒体应用编程接口 用于游戏.游戏开发工具.模拟器.样 ...
- Delphi开发 Android 程序启动画面简单完美解决方案
原文在这里 还是这个方法好用,简单!加上牧马人做的自动生成工具,更是简单. 以下为原文,向波哥敬礼! 前面和音儿一起研究 Android 下启动画面的问题,虽然问题得到了解决,但是,总是感觉太麻烦,主 ...
- lock和synchronized如何选择?
1.lock是一个接口,而synchronized是java关键字,synchronized是内置的语言实现. 2.synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁,而l ...
- 设计模式之装饰器模式(decorator pattern)
装饰器模式主要对现有的类对象进行包裹和封装,以期望在不改变类对象及其类定义的情况下,为对象添加额外功能.是一种对象结构型模式.需要注意的是,该过程是通过调用被包裹之后的对象完成功能添加的,而不是直接修 ...
- select下拉箭头样式重置
select{ appearance:none; -moz-appearance:none; -webkit-appearance:none; background: url("../ima ...
- 系统学习 Java IO (十)----回退流 PushbackInputStream
目录:系统学习 Java IO---- 目录,概览 PushbackInputStream 旨在从 InputStream 解析数据时使用. 有时您需要先读取几个字节以查看将要发生的事情,然后才能确定 ...
- tar 命令参数解释
tar 命令 tar [-cxtzjvfpPN]文件与目录参数说明:-c :建立一个打包文件:-x :解开一个打包文件:-t :查看 tar包里面的文件:(特别注意,在选择参数时,c/x/t仅能存在一 ...