首页 > 代码库 > P1865 A % B Problem
P1865 A % B Problem
题目背景
题目名称是吸引你点进来的
实际上该题还是很水的
题目描述
区间质数个数
输入输出格式
输入格式:
一行两个整数 询问次数n,范围m
接下来n行,每行两个整数 l,r 表示区间
输出格式:
对于每次询问输出个数 t,如l或r∉[1,m]输出 Crossing the line
输入输出样例
输入样例#1:
2 51 32 6
输出样例#1:
2Crossing 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
其实就是想写写莫队练练(你信么),然而这个优雅的暴力还是超时一个点:
#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>using namespace std;const int N=1000010;int answer[N],pos[N],become_answer;bool vis[N];int block,js,n,m; struct node{ int l,r,num;}E[N];inline int read(){ int x=0;int f=1;char c=getchar(); while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();} while(c>=‘0‘&&c<=‘9‘)x=x*10+c-‘0‘,c=getchar(); return x*f;}inline void important(){ for(int i=2;i<=sqrt(N+1);i++) if(!vis[i]) for(int j=i*2;j<=N;j+=i) vis[j]=1; vis[0]=vis[1]=1;}inline bool cmp(node a,node b){ if(pos[a.l]==pos[b.l]) return a.r<b.r; else return a.l<b.l;} inline void add(int x){ if(!vis[x]) become_answer++;}inline void dale(int x){ if(!vis[x]) become_answer--;}inline void MD(){ int l=1,r=1; for(int i=1;i<=js;i++) { int ll=E[i].l,rr=E[i].r; for(;l<E[i].l;l++)dale(l); for(;l>E[i].l;l--)add(l-1); for(;r>E[i].r;r--)dale(r); for(;r<E[i].r;r++)add(r+1); answer[E[i].num]=become_answer; }}int main(){ important(); n=read(),m=read(); for(int i=1;i<=n;i++) { int l=read(),r=read(); if(l<1||r<1||l>m||r>m) answer[i]=-1; else { E[++js].l=l; E[js].r=r; E[js].num=i; } } block=sqrt(m); for(int i=1;i<=m;i++) pos[i]=(i-1)/block+1; sort(E+1,E+js+1,cmp); MD(); for(int i=1;i<=n;i++) if(answer[i]==-1) printf("Crossing the line\n"); else printf("%d\n",answer[i]); return 0;}
水一波前缀和:
#include <cstdio>#include<iostream>#include<algorithm>const int N=1000005;using namespace std;int n,m,l,r,s[N];int main(){ scanf("%d%d",&n,&m); for(int i=2;i<=m;i++)s[i]=1; for(int i=2;i*i<=m;i++) for(int j=i+i;j<=m;j+=i) s[j]=0; for(int i=1;i<=m;i++) s[i]+=s[i-1]; while(scanf("%d%d",&l,&r)==2) (l<1||r>m)?printf("Crossing the line\n"):printf("%d\n",s[r]-s[l-1]);}
P1865 A % B Problem
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。