ACM-ICPC 2018 瀋陽賽區網路預賽 K. Supreme Number
阿新 • • 發佈:2018-12-09
題解
題目大意 給你一個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;
}