码迷,mamicode.com
首页 > 其他好文 > 详细

codeforces 568a//Primes or Palindromes?// Codeforces Round #315 (Div. 1)

时间:2018-09-14 14:00:36      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:stream   prime   with   cin   turn   begin   不能   vector   namespace   

题意:求使pi(n)*q<=rub(n)*p成立的最大的n。

先收集所有的质数和回文数。质数好搜集。回文数奇回文就0-9的数字,然后在头尾添加一个数。在x前后加a,就是x*10+a+a*pow(10,2)。偶回文同理。然后不能二分,因为比值不是单调的。

乱码:

#pragma comment(linker,"/STACK:1024000000,1024000000") 
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<vector>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<algorithm>
#include <stack>
using namespace std;
const int SZ=1e7+10,INF=0x7FFFFFFF;
typedef long long lon;

vector<lon> pri,pld;
bool isp[SZ];

void init()
{
    memset(isp,1,sizeof(isp));
    isp[0]=isp[1]=0;
    for(lon i=2;i*i<SZ;++i)
    {
        for(lon j=i*i;j<SZ;j+=i)
        {
            isp[j]=0;
        }
    }
    for(lon i=2;i<SZ;++i)
    {
        if(isp[i])
        {
            pri.push_back(i);
        }
    }
}

lon pow(lon x,lon p,int rbs1,int rbs2)
{
    lon res=1,ele=x;
    for(;p;p>>=1)
    {
        if(p&1)res*=ele;
        ele=ele*ele;
    }
    return res;
}

void getp(lon x,lon bit)
{
    if(bit>8)
    {
        return;
    }
    lon res;
    for(lon i=0;i<=9;++i)
    {
        res=0;
        res=x*10;
        res+=(bit&1)?i*pow((lon)10,bit+1,0,0):i*pow((lon)10,bit+1,0,0);
        res+=i;
        if(i)pld.push_back(res);
        getp(res,bit+2);
    }
}

int main()
{
    std::ios::sync_with_stdio(0);
    init();
    for(lon i=0;i<=9;++i)
    {
        if(i)pld.push_back(i*11);
        getp(i*11,2);
    }
    for(lon i=0;i<=9;++i)
    {
        if(i)pld.push_back(i);
        getp(i,1);
    }
    sort(pld.begin(),pld.end());
//    for(int i=0;i<pld.size();++i)
//    {
//        cout<<pld[i]<<endl;
//    }
    //cout<<pri.size()<<" "<<pld.size()<<endl;
    lon p,q;
    cin>>p>>q;
    lon res=0;
    for(lon i=1;i<2e6+10;++i)
    {
        lon num1=upper_bound(pri.begin(),pri.end(),i)-pri.begin();
        lon num2=upper_bound(pld.begin(),pld.end(),i)-pld.begin();
        //if(i<2600&&i>2500)cout<<i<<" "<<num1<<" "<<num2<<endl;
        if(num1*q<=num2*p)
        {
            res=max(res,i);
        }
    }
    cout<<res<<endl;
    return 0;
}

 

codeforces 568a//Primes or Palindromes?// Codeforces Round #315 (Div. 1)

标签:stream   prime   with   cin   turn   begin   不能   vector   namespace   

原文地址:https://www.cnblogs.com/gaudar/p/9646002.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!