codeforces237C Primes on Interval
来源:互联网 发布:绝地求生n卡终极优化 编辑:程序博客网 时间:2024/05/16 07:07
Primes on Interval
还是挺简单的一道题,nlogn的算法很容易想 ,O(n)的就稍微麻烦了点
#include <cstdlib>#include <cctype>#include <cstring>#include <cstdio>#include <cmath>#include <algorithm>#include <vector>#include <string>#include <iostream>#include <sstream>#include <map>#include <set>#include <queue>#include <stack>#include <fstream>#include <numeric>#include <iomanip>#include <bitset>#include <list>#include <stdexcept>#include <functional>#include <utility>#include <ctime>using namespace std;#define PB push_back#define MP make_pair#define REP(i,n) for(int i=0;i<(n);++i)#define FOR(i,l,h) for(int i=(l);i<=(h);++i)#define DWN(i,h,l) for(int i=(h);i>=(l);--i)#define CLR(vis) memset(vis,0,sizeof(vis))#define MST(vis,pos) memset(vis,pos,sizeof(vis))#define MAX3(a,b,c) max(a,max(b,c))#define MAX4(a,b,c,d) max(max(a,b),max(c,d))#define MIN3(a,b,c) min(a,min(b,c))#define MIN4(a,b,c,d) min(min(a,b),min(c,d))#define PI acos(-1.0)#define INF 1000000000#define LINF 1000000000000000000LL#define eps 1e-8typedef long long ll;const int MAXN=1e6+5;bool notp[MAXN];int pr[MAXN],pn;void getprime(){ pn=0; memset(notp,0,sizeof(notp)); notp[1]=1; for(int i=2;i<MAXN;i++) { if(!notp[i])pr[pn++]=i; for(int j=0;j<pn && pr[j]*i<MAXN;j++) { notp[pr[j]*i]=1; if(i%pr[j]==0)break; } }}int a,b,k;int sum[MAXN];int check(int mid){ FOR(i,a,b-mid+1) { if(sum[i+mid-1]-sum[i-1]<k) return 0; } return 1;}int solve(){ int l=1,r=b-a+1,mid,ans=-1; while(l<=r) { mid=(l+r)>>1; if(check(mid)) { r=mid-1; ans=mid; } else l=mid+1; } return ans;}int main(){ getprime(); cin>>a>>b>>k; CLR(sum); FOR(i,a,b) sum[i]=sum[i-1]+(notp[i]==0); int ans=solve(); cout<<ans<<endl; return 0;}
这是别人的O(n)算法
#include <stdio.h>#include <string.h>#include <iostream>#include <math.h>#include <string>#include <map>#include <set>#include <queue>#include <stack>#include <algorithm>#define inf 0x3f3f3f3f#define Inf 0x3FFFFFFFFFFFFFFFLL#define eps 1e-8#define DEBUG(a) cout<<#a" = "<<(a)<<endl;#define DEBUGARR(a,n) for(int i=0;i<(n);i++) {cout<<#a"["<<i<<"] = "<<(a)[i]<<endl;}#define pi acos(-1.0)using namespace std;#define maxn 1111111int pri[maxn], cnt;int mark[maxn];void sieve() { int i, j; cnt=1, pri[0] = 2; for (i = 3; i < maxn; i += 2) { if (!mark[i]) pri[cnt++] = i; for (j = 1; j < cnt, pri[j] * i < maxn; ++j) { mark[ i * pri[j] ] = 1; if ( !(i % pri[j]) ) break; } }}int main(){ #ifdef StyleTang_Code freopen("123.in","r",stdin); freopen("123.out","w",stdout); #endif int i,j; sieve(); for(i=0;i<maxn;i+=2) mark[i]=1; mark[1]=1; mark[2]=0; int a,b,k; while(cin>>a>>b>>k) { int len=0; int le=a; int cnt=0; if(mark[a]==0) cnt=0; for(i=a;i<=b;i++) { cnt=cnt+(mark[i]==0)-(mark[le]==0); if(cnt>=k) { le++; continue; } else { cnt=cnt+(mark[le]==0); if(cnt>=k) { len++; continue; } else len++; while(cnt<k&&i<=b) { i++; cnt=cnt+(mark[i]==0); len++; } if(i>b) len=-1; } } if(cnt<k) len=-1; cout<<len<<endl; } return 0;}
0 0
- codeforces237C Primes on Interval
- 【codeforces237C】Primes on Interval
- Primes on Interval
- 【Primes on Interval】
- Primes on Interval
- 【codeforce237C】Primes on Interval
- 237C - Primes on Interval
- cf273C. Primes on Interval【二分】
- ZCMU-1022-Primes on Interval
- codeforces 237C.Primes on Interval
- Primes on Interval+codeforces+筛选法打表
- CodeForces-237C- Primes on Interval
- Codeforces 237C Primes on Interval 【二分】
- 【 Codeforces 237C Primes on Interval】+ 二分
- CodeForces 237C Primes on Interval
- CodeForces - 237C Primes on Interval 【二分】
- Codeforces 237C Primes on Interval
- Primes on Interval 【打表+二分】
- 最大子矩阵和问题
- 003
- IOS7.1下载企业版应用报“xxx证书无效”的解决方案
- Week 1
- 进程间通信-信号量
- codeforces237C Primes on Interval
- Using DLP tools for cloud computing security
- 扑克牌顺子问题
- 12岁的少年教你用Python做小游戏
- 最大m子段和问题
- Game
- MySQl索引创建
- 习近平会见纳米比亚总理根哥布
- 第一篇论文完成后