您的位置:首页 > 其它

USACO Section 1.5: Prime Palindromes

2014-04-15 11:33 267 查看
这题的关键点:

1.不能检查是否palindrome,否则会TLE

2.检查Prime上限一定为sqrt(x)。

/*
ID: leetcod3
PROG: pprime
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string>
#include <map>
#include <vector>
#include <set>
#include <algorithm>
#include <queue>
#include <cmath>
#include <list>
#include <cstring>
#include <cstdlib>
#include <limits>
#include <stack>

using namespace std;

ofstream fout ("pprime.out");
ifstream fin ("pprime.in");

vector<int> S;

bool prime(int x) {
int root = (int)sqrt(x*1.0);
for (int i = 2; i <= root; i++) {
if (x % i == 0) return false;
}
return true;
}

void dfs(int x, int len) {
if (len > 8) return;
int factor = 1;
if (prime(x)) S.push_back(x);
for (int i = 0; i < len; ++i) factor *= 10;
for (int i = 0; i < 10; ++i) {
int tmp = factor * i;
tmp += x;
tmp *= 10;
tmp += i;
dfs(tmp, len+2);
}
}

int main()
{
int a, b;
fin >> a >> b;
for (int i = 0; i < 10; i++) dfs(i, 1);
S.push_back(11);
sort(S.begin(), S.end());
for (int i = 0; i < S.size(); i++) {
if (S[i] < a) continue;
if (S[i] > b) break;
fout << S[i] << endl;
}
/*for (set<int>::iterator it = S.begin(); it != S.end(); it++) {
if (*it < a) continue;
if (*it > b) break;
fout << *it << endl;
}*/
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: