社区讨论
最后三个测试点超时了,怎么办
P1217[USACO1.5] 回文质数 Prime Palindromes参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mhz4914r
- 此快照首次捕获于
- 2025/11/15 01:12 4 个月前
- 此快照最后确认于
- 2025/11/16 13:47 4 个月前
最后三个测试点超时,有没有什么好的改进方法
CPP#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int maxn=1e8+1;
vector<ll>primes;
bool isprimes[maxn]={0};
vector<ll>palin;
vector<ll>palinprimes;
void solve(){
ll a,b;
cin>>a>>b;
for(int i=1;i<=8;i++){
switch(i){
case 1:
for(ll i=1;i<=9;i++){
ll k=i;
if(k>=a&&k<=b) palin.push_back(k);
}
break;
case 2:
for(ll i=1;i<=9;i++){
ll k=10*i+i;
if(k>=a&&k<=b) palin.push_back(k);
}
break;
case 3:
for(ll i=0;i<=9;i++)
for(ll j=1;j<=9;j++){
ll k=100*j+10*i+j;
if(k>=a&&k<=b) palin.push_back(k);
}
break;
case 4:
for(ll i=0;i<=9;i++)
for(ll j=1;j<=9;j++){
ll k=1000*j+100*i+10*i+j;
if(k>=a&&k<=b) palin.push_back(k);
}
break;
case 5:
for(ll p=1;p<=9;p++)
for(ll i=0;i<=9;i++)
for(ll j=0;j<=9;j++){
ll k=10000*p+1000*j+100*i+10*j+p;
if(k>=a&&k<=b) palin.push_back(k);
}
break;
case 6:
for(ll p=1;p<=9;p++)
for(ll i=0;i<=9;i++)
for(ll j=0;j<=9;j++){
ll k=100000*p+10000*j+1000*i+100*i+10*j+p;
if(k>=a&&k<=b) palin.push_back(k);
}
break;
case 7:
for(ll q=1;q<=9;q++)
for(ll p=0;p<=9;p++)
for(ll i=0;i<=9;i++)
for(ll j=0;j<=9;j++){
ll k=1000000*q+100000*p+10000*j+1000*i+100*j+10*p+q;
if(k>=a&&k<=b) palin.push_back(k);
}
break;
case 8:
for(ll q=1;q<=9;q++)
for(ll p=0;p<=9;p++)
for(ll i=0;i<=9;i++)
for(ll j=0;j<=9;j++){
ll k=10000000*q+1000000*p+100000*j+10000*i+1000*i+100*j+10*p+q;
if(k>=a&&k<=b) palin.push_back(k);
}
break;
}
}
for(int i=2;i<=b;i++){
if(isprimes[i]==0){
primes.push_back(i);
}
for(int j=0;j<=b&&i*primes[j]<=b;j++){
isprimes[i*primes[j]]=1;
if(i%primes[j]==0) break;
}
}
for(int i=0;i<palin.size();i++){
for(int j=0;j<primes.size();j++){
if(palin[i]==primes[j]&&primes[j]>=a&&primes[j]<=b) palinprimes.push_back(primes[j]);
}
}
sort(palinprimes.begin(),palinprimes.end(),[&](ll a,ll b){
return a<b;
});
for(int i=0;i<palinprimes.size();i++){
cout<<palinprimes[i]<<endl;
}
return ;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int T=1;
//cin>>T;
while(T--){
solve();
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...