POJ 3842 An Industrial Spy 快筛质数+STL乱搞

原创 2014年10月11日 18:22:14

题目大意:n组数据,每组数据给出不超过7个数字,将这些数字排列,问能组成多少个素数。


思路:观察数据范围,7个数字,最多就是10^7个数,开一个bool就能存下那些是素数。当然最好还是线性筛,O(n)处理出来。然后组合数字当然可以搜索,但是我比较偷懒,直接全排列了。然后再为了防止重复计数,用一个map存一下是否搜过。就这样乱搞过了。


CODE:


#include <map>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define INF 10000000
#define MAX 1000010
using namespace std;

map<int,bool> G;

int cases;
int temp,src[MAX],cnt,ans;
bool not_prime[INF];
int prime[MAX],primes;

char s[10];

void Pretreatment();
inline void Initialize();
inline void Judge();

int main()
{
	Pretreatment();
	for(cin >> cases;cases; --cases) {
		Initialize();
		scanf("%s",s + 1);
		cnt = strlen(s + 1);
		for(int i = 1;i <= cnt; ++i)
			src[i] = s[i] - '0';
		sort(src + 1,src + cnt + 1);
		do	Judge();	while(next_permutation(src + 1,src + cnt + 1));
		printf("%d\n",ans);
	}
	return 0;
}

void Pretreatment()
{
	not_prime[0] = not_prime[1] = true;
	for(int i = 2;i < INF; ++i) {
		if(!not_prime[i])
			prime[++primes] = i;
		for(int j = 1;j <= primes && i * prime[j] < INF; ++j) {
			not_prime[i * prime[j]] = true;
			if(i % prime[j] == 0)	break;	
		}
	}
}

inline void Initialize()
{
	cnt = ans = 0;
	G.clear();
}

inline void Judge()
{
	int now = 0;
	for(int i = 1;i <= cnt; ++i) {
		now = now * 10 + src[i];
		if(!not_prime[now] && !G[now])
			G[now] = true,ans++;
	}
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

南邮 OJ 1128 An Industrial Spy

An Industrial Spy 时间限制(普通/Java) : 10000 MS/ 30000 MS          运行内存限制 : 65536 KByte 总提交 : 38 ...

【NOIP 模拟题】[T1]质数生成器(线性筛+乱搞)

待浮花浪蕊俱尽,伴幽独

2016 百度之星 Problem D (利用STL乱搞)

Problem D    Accepts: 1785    Submissions: 5157  Time Limit: 2000/1000 MS (Java/Others)    Memory L...

[排序][stl乱搞] UVA 12957 Rectangle Park

题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&probl...

Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) -- C. Ray Tracing(STL乱搞)

大体题意: 告诉你一个n*m的矩形,在告诉你 有k 个传感器位于矩形内部,你从(0,0)位置发射一个东西,只能斜着跑,求到达每一个传感器的最短时间,不能到达输出-1,碰到四个角落退出!否则一指弹! 思...

poj3842-效率啊

这是一道算法选择不好会TLE的题目,同时这道题目涉及到的内容也非常丰富。至少我学到了一些知识。 首先题目的内容很简单,就是最多给你7个数字,问你用着7个数字能组成多少个素数。   由于原来搞过线...

POJ 3114 Spy Communication (强连通分量tarjan + SPFA)

#include #define MAX_CITIES 555 #define MAX_AGREEMENTS (MAX_CITIES * MAX_CITIES) #define INF (1 <...

[BZOJ2082][Poi2010][质因数分解][乱搞]Divine divisor

题意找到最大k,使得若m为n的因数,则m^k也为n的因数,并求出有多少个m满足条件BZOJ300题留念(果然还是不够)在status里随手点开的题,因为要求最大的k,那么对于满足条件的n,不可能存在平...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)