【ACM-ICPC 2018 沈陽賽區網絡預賽 K】Supreme Number
阿新 • • 發佈:2018-09-11
string ase -a pri 位數 整除 while ant efi
【鏈接】 我是鏈接,點我呀:)
【題意】
在這裏輸入題意
【題解】
顯然每個數字只可能是1,3,5,7
然後如果3,5,7這些數字出現兩次以上。顯然兩個3||5||7都能被11整除。
然後1的話最多能出現兩次。
那麽也就是說最多只可能有5位數字。
把小於等於5位的全都枚舉一遍。求出合法的就好。
如果n>=5位就直接輸出那個最大的就Ok.
【代碼】
#include <bits/stdc++.h> #define LL long long #define rep1(i,a,b) for (int i = a;i <= b;i++) #define rep2(i,a,b) for (int i = a;i >= b;i--) #define all(x) x.begin(),x.end() #define pb push_back #define lson l,mid,rt<<1 #define ri(x) scanf("%d",&x) #define rl(x) scanf("%lld",&x) #define rs(x) scanf("%s",x) #define rson mid+1,r,rt<<1|1 using namespace std; const double pi = acos(-1); const int dx[4] = {0,0,1,-1}; const int dy[4] = {1,-1,0,0}; int ans[]= {2,3,5,7,11,13,17,23,31,37,53,71,73,113,131,137,173,311,317}; string s; int kk = 1; int main() { int t; scanf("%d",&t); while(t--) { string s; cin>>s; LL n=0; rep1(i,0,(int)s.size()-1){ n=n*10+s[i]-'0'; if(n>317)break; } printf("Case #%d: ",kk++); if(n>317)puts("317"); else { int x=lower_bound(ans,ans+19,n)-ans; if(ans[x]>n)x--; printf("%d\n",ans[x]); } } }
【ACM-ICPC 2018 沈陽賽區網絡預賽 K】Supreme Number