USACO SuperPrime Rib
2012-06-18 22:22
288 查看
竟然第一次就通过了,难得啊~~~
思路是这样的: 对每一个SuperPrime,最高位在{2,3,5,7}里挑,其他位在{1,3,7,9}里挑。
所以在构造n位的SuperPrime数的时候,从高位(第一位)到低位(第N位),采用递归;并且分level == 1 , level > 1两种情况。 level == N + 1 的时候结束。见代码
/*
ID: wangxin12
PROG: sprime
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <vector>
#include <math.h>
#include <string>
using namespace std;
int N;
bool isPrime(int n) {
bool flag = true;
int start = 2;
int end = sqrt((double)n);
for(int i = start; i <= end; i++) {
int mod = n % i;
if( mod == 0) {
flag = false;
break;
}
}
return flag;
}
void f(int level, vector<int> & v1) {
//base case
if(level == N + 1) {
ofstream fout("sprime.out");
for(int i = 0; i < v1.size(); i++) {
fout<<v1[i]<<endl;
}
fout.close();
return;
}
vector<int> curr;
if(level == 1) {
curr.push_back(2);
curr.push_back(3);
curr.push_back(5);
curr.push_back(7);
f(level + 1, curr);
return;
}
for(int i = 0; i < v1.size(); i++) {
int temp;
temp = v1[i] * 10 + 1;
if(isPrime(temp)) curr.push_back(temp);
temp = v1[i] * 10 + 3;
if(isPrime(temp)) curr.push_back(temp);
temp = v1[i] * 10 + 7;
if(isPrime(temp)) curr.push_back(temp);
temp = v1[i] * 10 + 9;
if(isPrime(temp)) curr.push_back(temp);
}
f(level + 1, curr);
return;
}
int main() {
ifstream fin("sprime.in");
fin>>N;
fin.close();
vector<int> result;
f(1, result);
return 0;
}
思路是这样的: 对每一个SuperPrime,最高位在{2,3,5,7}里挑,其他位在{1,3,7,9}里挑。
所以在构造n位的SuperPrime数的时候,从高位(第一位)到低位(第N位),采用递归;并且分level == 1 , level > 1两种情况。 level == N + 1 的时候结束。见代码
/*
ID: wangxin12
PROG: sprime
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <vector>
#include <math.h>
#include <string>
using namespace std;
int N;
bool isPrime(int n) {
bool flag = true;
int start = 2;
int end = sqrt((double)n);
for(int i = start; i <= end; i++) {
int mod = n % i;
if( mod == 0) {
flag = false;
break;
}
}
return flag;
}
void f(int level, vector<int> & v1) {
//base case
if(level == N + 1) {
ofstream fout("sprime.out");
for(int i = 0; i < v1.size(); i++) {
fout<<v1[i]<<endl;
}
fout.close();
return;
}
vector<int> curr;
if(level == 1) {
curr.push_back(2);
curr.push_back(3);
curr.push_back(5);
curr.push_back(7);
f(level + 1, curr);
return;
}
for(int i = 0; i < v1.size(); i++) {
int temp;
temp = v1[i] * 10 + 1;
if(isPrime(temp)) curr.push_back(temp);
temp = v1[i] * 10 + 3;
if(isPrime(temp)) curr.push_back(temp);
temp = v1[i] * 10 + 7;
if(isPrime(temp)) curr.push_back(temp);
temp = v1[i] * 10 + 9;
if(isPrime(temp)) curr.push_back(temp);
}
f(level + 1, curr);
return;
}
int main() {
ifstream fin("sprime.in");
fin>>N;
fin.close();
vector<int> result;
f(1, result);
return 0;
}
相关文章推荐
- Superprime Rib(usaco)
- usaco Super Prime Rib individual report
- Superprime Rib_特殊的质数肋骨_usaco1.5_codevs2080_dfs
- 洛谷P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib
- 洛谷 P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib
- USACO SuperPrime Rib
- usaco1.5.3 SuperPrime Rib
- USACO section 1.5 Superprime Rib(深搜)
- USACO 1.5 SuperPrime Rib (sprime)
- USACO section 1.5 Superprime Rib(深搜)
- usaco Superprime Rib<dfs找回文>
- USACO-Section1.6 Superprime Rib (枚举)
- luogu1218 [USACO1.5] Superprime Rib(搜索+素数判断)
- USACO 1.5 Superprime Rib (DFS)
- USACO Superprime Rib(dfs)
- usaco - Superprime Rib
- USACO Superprime Rib
- usaco Superprime Rib
- usaco Superprime Rib
- USACO-Section 1.5 Superprime Rib(Miller-Rabin)