codeforce 568A Primes or Palindromes?

来源:互联网 发布:vmware tools linux 编辑:程序博客网 时间:2024/05/17 15:58

【题目链接】http://codeforces.com/problemset/problem/568/A

【解题报告】
水题,看到时限在3s于是想到可以打一个千万级别的表(一不小心打到上亿的表跑了半天跑不出来TAT),先试着打了一个1e7的表,求出了1e7以内所有的pi[i]和rub[i]。然后题目是求出最大的满足pi[n]

#include<bits/stdc++.h>using namespace std;const int maxn=1e7+10;int vis[maxn+10],pi[maxn+10],rub[maxn+10];void getprime(  int n ){    memset(vis,0,sizeof(vis));      vis[1]=1;    for(int i=2;i<=n;i++)        for(int j=2*i;j<=n;j+=i)if(!vis[j])            vis[j]=1;}bool is_pld(int num){    int len=0;    int s[100];    while(num)    {        s[++len]=num%10;        num/=10;    }    for(int i=1;i<=len/2;i++)        if( s[i]!=s[len-i+1] )return false;    return true;}int main(){    getprime(maxn);    pi[0]=0;    for(int i=1;i<=maxn;i++)if(!vis[i])pi[i]=pi[i-1]+1;else pi[i]=pi[i-1];    rub[0]=0;    for(int i=1;i<=maxn;i++)    {        rub[i]=rub[i-1];        if(is_pld(i))rub[i]++;    }    double p,q;    cin>>p>>q;    double A=p/q;    for(int i=maxn;i>=1;i--)if(pi[i]<=A*rub[i])    {        cout<<i<<endl;        return 0;    }    cout<<"Palindromic tree is better than splay tree\n";    return 0;}
0 0
原创粉丝点击