1. 程式人生 > >ACM-ICPC 2018 瀋陽賽區網路預賽 K. Supreme Number

ACM-ICPC 2018 瀋陽賽區網路預賽 K. Supreme Number

題解

題目大意 給你一個n 問你在小於等於n的情況下滿足條件的最大數字是多少 條件是把這個數當作字串 他的所有子段(可以不連續)構成的數字都是質數

暴力打表 打表後發現數字就那麼幾個 接受的時候用字串接受 判斷位數是否大於3(最大滿足條件的數字長度) 大於就轉成int二分 否則直接輸出最大數字

AC程式碼

#include <stdio.h>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int INF = 0x3f3f3f3f;
const int MAXN = 1e4
+ 10; char s[MAXN]; int main() { #ifdef LOCAL //freopen("C:/input.txt", "r", stdin); #endif int ans[] = { 317, 311, 173, 137, 131, 113, 73, 71, 53, 37, 31, 23, 17, 13, 11, 7, 5, 3, 2, 1 }; stringstream ss; int t; cin >> t; for (int ti = 1; ti <= t; ti++) { scanf
("%s", s); int l = strlen(s); if (l > 3) printf("Case #%d: 317\n", ti); else { ss.clear(); int n; ss << s; ss >> n; printf("Case #%d: %d\n", ti, *lower_bound(ans, ans + 20, n, greater<int
>())); } } return 0; }