【2018ACM/ICPC网络赛】沈阳赛区

这次网络赛没有打。生病了去医院了。。尴尬。晚上回来才看了题补简单题。


K  Supreme Number

题目链接:https://nanti.jisuanke.com/t/31452

题意:输入一个整数n(其实可以当成字符串,因为很长啊。),求满足不超过n的supreme number。这个supreme number的定义是,这个字符串的子串都是质数。比如。137就是,但是19就不是。

题解:找规律。我先开始题没看懂,没懂子串也要为素数。后面才看到。然后在纸上枚举了一下可能出现的情况。发现大于4位数之后的只有317可以满足。所以打表列举即可。

 

代码:

 1 #include<iostream>
 2 #include<vector>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<queue>
 6 #include<cmath>
 7 using namespace std;
 8 typedef long long ll;
 9 const int N =1e8+5;
10 const int mod = 1e9+7;
11 int T;
12 int sp[21] = {1,2,3,5,7,
13 11,13,17,23,31,37,53,71,73, 
14 113,131,137,173,
15 311,317,1000};
16 
17 int change(string s){
18     int num = 0;
19     for( int i = 0 ;i < s.size(); i++){
20         num = num * 10 + s[i] - '0';
21     }
22     return num;
23 }
24 
25  
26 int main(){
27     cin>>T;
28     int t = 1;
29      while(T--){
30          string s;
31          cin>>s;
32          int len = s.size();
33          if(len >= 4){
34              printf("Case #%d: 317\n",t++);
35          }
36          else{
37              int num = change(s);
38              
39              for(int i = 0 ; i <= 20;i++){
40                  if(num == sp[i]){
41                      printf("Case #%d: %d\n",t++,sp[i]);
42                      break;
43                  }
44                  else if(num < sp[i]){
45                      printf("Case #%d: %d\n",t++,sp[i-1]);
46                      break;
47                  }
48              }
49          }
50     }
51     return 0;
52 }
53          
View Code

猜你喜欢

转载自www.cnblogs.com/Asumi/p/9610708.html