HUST team contest #2 A An Industrial Spy ||poj 3842 (筛)
蠢了。
这道题显然可以搜。。
然后自己搜索的姿势果然还是不怎么地。。
最后是蔡大神过掉的。
他的思路是枚举素数,然后把素数的各位拆开,看这些数字是否在给出的字符串中出现过。
一开始TLE掉了。
后来又预处理出来一个标记数组,如果字符串中没有数字2,那么20w+的素数就可以直接跳过去,然后A掉了。
其实因为数字的位数最多才7位。。
暴力也不是不可以。。。。
STL中求全排列的那个函数我也不是没用过。。。比赛的时候怎么就没想到==
再开个map判重
然后素数打表部分。
队友是打了个30000+行的表。。。。
说起来。。。我好像还没用C++写过筛法求素数。。。
说来惭愧啊。。。。
pascal的时候倒是写过几次呢。
再复习下。。。
http://blog.csdn.net/dinosoft/article/details/5829550
写的是快速筛。
/*************************************************************************
> File Name: code/2015summer/0821/A.cpp
> Author: 111qqz
> Email: rkz2013@126.com
> Created Time: 2015年08月20日 星期四 22时17分14秒
************************************************************************/
1#include<iostream>
2#include<iomanip>
3#include<cstdio>
4#include<algorithm>
5#include<cmath>
6#include<cstring>
7#include<string>
8#include<map>
9#include<set>
10#include<queue>
11#include<vector>
12#include<stack>
13#define y0 abc111qqz
14#define y1 hust111qqz
15#define yn hez111qqz
16#define j1 cute111qqz
17#define tm crazy111qqz
18#define lr dying111qqz
19using namespace std;
20#define REP(i, n) for (int i=0;i<int(n);++i)
21typedef long long LL;
22typedef unsigned long long ULL;
23const int inf = 0x7fffffff;
24const int N=1E7+7;
25using namespace std;
1bool not_prime[N];
2int prime[N],pri_num;
3map<int,bool> mp;
4int a[N];
5int ans;
6map<int,bool>::iterator it;
7char st[15];
8int len;
9void init()
10{
not_prime[0] =true;
not_prime[1] = true;
1 for(int i = 2;i < N; ++i)
2 {
3 if(!not_prime[i])
4 prime[++pri_num] = i;
5 for(int j = 1;j <= pri_num && i * prime[j] < N; j++)
6 {
1 not_prime[i * prime[j]] = true;
2 if(i % prime[j] == 0) break;
3 }
4 }
5}
void solve()
{
1 int res = 0;
2 for(int i = 1;i <= len; ++i)
3 {
1 res = res * 10 + a[i];
2// cout<<"res:"<<res<<endl;
3 if(!not_prime[res] && !mp[res])
4 {
5 mp[res] = true;
6 ans++;
7 }
8 }
9}
1int main()
2{
3 init();
4// for ( int i =2 ; i <= 1000 ; i++)
5// {
6// if (!not_prime[i])
7// {
8// cout<<i<<endl;
9// }
10// }
11 int T;
12 cin>>T;
13 while (T--)
14 {
1 ans = 0 ;
2 mp.clear();
3 scanf("%s",st+1);
4 len = strlen(st + 1);
5 for(int i = 1;i <= len; i++)
6 {
7 a[i] = st[i] - '0';
8 }
9 sort(a+1,a+len+1);
10 do
11 {
12 solve();
13 }while (next_permutation(a+1,a+len+1));
1 printf("%d\n",ans);
2 }
3 return 0;
4}
/*************************************************************************
> File Name: code/2015summer/0821/A.cpp
> Author: 111qqz
> Email: rkz2013@126.com
> Created Time: 2015年08月20日 星期四 22时17分14秒
************************************************************************/
1#include<iostream>
2#include<iomanip>
3#include<cstdio>
4#include<algorithm>
5#include<cmath>
6#include<cstring>
7#include<string>
8#include<map>
9#include<set>
10#include<queue>
11#include<vector>
12#include<stack>
13#define y0 abc111qqz
14#define y1 hust111qqz
15#define yn hez111qqz
16#define j1 cute111qqz
17#define tm crazy111qqz
18#define lr dying111qqz
19using namespace std;
20#define REP(i, n) for (int i=0;i<int(n);++i)
21typedef long long LL;
22typedef unsigned long long ULL;
23const int inf = 0x7fffffff;
24const int N=1E7+7;
25using namespace std;
1bool not_prime[N];
2int prime[N],pri_num;
3map<int,bool> mp;
4int a[N];
5int ans;
6map<int,bool>::iterator it;
7char st[15];
8int len;
9void init()
10{
not_prime[0] =true;
not_prime[1] = true;
1 for(int i = 2;i < N; ++i)
2 {
3 if(!not_prime[i])
4 prime[++pri_num] = i;
5 for(int j = 1;j <= pri_num && i * prime[j] < N; j++)
6 {
1 not_prime[i * prime[j]] = true;
2 if(i % prime[j] == 0) break;
3 }
4 }
5}
void solve()
{
1 int res = 0;
2 for(int i = 1;i <= len; ++i)
3 {
1 res = res * 10 + a[i];
2// cout<<"res:"<<res<<endl;
3 if(!not_prime[res] && !mp[res])
4 {
5 mp[res] = true;
6 ans++;
7 }
8 }
9}
1int main()
2{
3 init();
4// for ( int i =2 ; i <= 1000 ; i++)
5// {
6// if (!not_prime[i])
7// {
8// cout<<i<<endl;
9// }
10// }
11 int T;
12 cin>>T;
13 while (T--)
14 {
1 ans = 0 ;
2 mp.clear();
3 scanf("%s",st+1);
4 len = strlen(st + 1);
5 for(int i = 1;i <= len; i++)
6 {
7 a[i] = st[i] - '0';
8 }
9 sort(a+1,a+len+1);
10 do
11 {
12 solve();
13 }while (next_permutation(a+1,a+len+1));
1 printf("%d\n",ans);
2 }
3 return 0;
4}
v