2015-08-11 03:22:39

传送门

总结:由于实验室网络不稳定... 跑到宿舍楼下自习室打的...

  最近一直在补多校、刷图论数论,脑子有点僵... DP很久没刷,深感dp实力下降,在之前的BC中就已经体现出来了,第二道水DP竟然还debug了10min TUT。

  今天这场也算是敲醒了dp警钟。

 

A题:这题出的怪怪的,暴力打表... 没啥好说的,注意 long long。

#include <cstdio>
#include <ctime>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;

#define getmid(l,r) ((l) + ((r) - (l)) / 2)
#define MP(a,b) make_pair(a,b)
#define PB push_back

typedef long long ll;
typedef pair<int,int> pii;
const double eps = 1e-8;
const int INF = (1 << 30) - 1;

int prime[2000010];
int pal[2000010];

bool P(int v){
    int k = sqrt(1.0 * v);
    for(int i = 2; i <= k; ++i) if(v % i == 0) return false;
    return true;
}

int s[10];

bool PA(int v){
    int cnt = 0;
    while(v){
        s[++cnt] = v % 10;
        v /= 10;
    }
    for(int i = 1; i <= cnt; ++i) if(s[i] != s[cnt + 1 - i]) return false;
    return true;
}

int main(){
    pal[1] = 1;
    prime[1] = 0;
    for(int i = 2; i <= 2000000; ++i){
        if(P(i)) prime[i] = 1;
        if(PA(i)) pal[i] = 1;
        prime[i] += prime[i - 1];
        pal[i] += pal[i - 1];
    }
    int p,q;
    scanf("%d%d",&p,&q);
    int ans = 0;
    for(int i = 1; i <= 2000000; ++i){
        ll A = 1ll * prime[i] * q;
        ll B = 1ll * pal[i] * p;
        if(A <= B) ans = i;
    }
    printf("%d\n",ans);
    return 0;
}
View Code

相关文章: