关于UVA
  • 板块灌水区
  • 楼主wuzebang2009
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/2/7 20:09
  • 上次更新2025/2/7 22:58:11
查看原帖
关于UVA
1501877
wuzebang2009楼主2025/2/7 20:09

UVA数据是不是随机的?

这道题

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
vector<long long> pri;
bool is_prime[1<<30];
long long l,r;

void check(int x){
    is_prime[0]=is_prime[1]=true;
    for(long long i=2;i<=x;i++){
        if(!is_prime[i]) pri.push_back(i);
        for(long long j=0;j<pri.size();j++){
            if(pri[j]*i>x) break;
            is_prime[pri[j]*i]=true;
            if(i%pri[j]==0) break;
        }
    }
}

signed main(){
    while(scanf("%lld%lld",&l,&r)!=EOF){
        check(sqrt(r));
        bool ans[1000010];
        vector<int> cnt;
        memset(ans,true,sizeof ans);
        for(int i=l;i<=r;i++){
            for(int j=0;j<pri.size() && pri[j]<i;j++){
                if(i%pri[j]==0){
                    ans[i-l]=false;
                    break;
                }
            }
        }
        for(int i=l;i<=r;i++){
            if(ans[i-l] && l!=1) cnt.push_back(i);
        }
        if(cnt.size()<2){
            printf("There are no adjacent primes.\n");
            continue;
        }
        int min1,min2,max1,max2;
        int dis1=1e9,dis2=0;
        for(int i=0;i<cnt.size()-1;i++){
            if(cnt[i+1]-cnt[i]<dis1){
                dis1=cnt[i+1]-cnt[i];
                min1=cnt[i],min2=cnt[i+1];
            }
            if(cnt[i+1]-cnt[i]>dis2){
                dis2=cnt[i+1]-cnt[i];
                max1=cnt[i],max2=cnt[i+1];
            }
        }
        printf("%lld,%lld are closest, %lld,%lld are most distant.\n",min1,min2,max1,max2);
    }
}

上午交AC,下午WA,并且偶尔TLE。 why?

2025/2/7 20:09
加载中...