笨小猴 2008年NOIP全国联赛提高组

题目描述 Description

笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!

这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。

输入描述 Input Description

输入文件word.in只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。

输出描述 Output Description

输出文件word.out共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”;

第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0。

样例输入 Sample Input

样例一

error

样例二

olympic

 

样例输出 Sample Output

样例一

Lucky Word

2

样例二

No Answer

0

数据范围及提示 Data Size & Hint
模拟+米勒拉宾素性判定
莫名想笑
 1 #include<cstdio>
 2 #include<iostream>
 3 
 4 using namespace std;
 5 int dic[27];
 6 
 7 string a;
 8 
 9 
10 
11 int qpow(int a,int b,int r)//快速幂 
12 {
13     int ans=1,buff=a;
14     while(b)
15     {
16         if(b&1)ans=(ans*buff)%r;
17         buff=(buff*buff)%r;
18         b>>=1;
19     }
20     return ans;
21 }
22 
23 bool Miller_Rabbin(int n,int a)//米勒拉宾素数测试 
24 {
25     int r=0,s=n-1,j;
26     if(!(n%a))
27         return false;
28     while(!(s&1))
29     {
30         s>>=1;
31         r++;
32     }
33     int k=qpow(a,s,n);
34     if(k==1)
35         return true;
36     for(j=0;j<r;j++,k=k*k%n)
37         if(k==n-1)
38             return true;
39     return false;
40 }
41 bool IsPrime(int n)//判断是否是素数 
42 {
43     int tab[]={2,3,5,7};
44     for(int i=0;i<4;i++)
45     {
46         if(n==tab[i])
47             return true;
48         if(!Miller_Rabbin(n,tab[i]))
49             return false;
50     }
51     return true;
52 }
53 
54 
55 int main()
56 {
57     cin>>a;
58     int minn=0x7fffffff;
59     int maxn=-111;
60     for(int i=0;i<a.size();i++)
61     {
62         //if(a[i]==' ')continue;
63         //if(a[i]<'a') a[i]+='a'-'A';
64         dic[int(a[i]-'a')]++;
65         
66     }
67     for(int i=0;i<26;i++)
68     {
69         if(dic[i]&&dic[i]>maxn)maxn=dic[i];
70         if(dic[i]&&dic[i]<minn)minn=dic[i];
71     }
72     int pos=maxn-minn;
73     if(pos!=1)
74     if(IsPrime(pos))
75     {
76         cout<<"Lucky Word"<<endl<<pos;
77          return 0;
78     }
79     
80     cout<<"No Answer"<<endl<<"0";
81     return 0;
82 }

 

 
posted @ 2017-05-15 20:09  zzzzx  阅读(197)  评论(0编辑  收藏  举报