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; }