React Hook~部分實用鉤子
阿新 • • 發佈:2020-07-31
A:http://codeforces.com/contest/1388/problem/A
題意:
定義近素數:m=x*y,x和y均為素數
給出n,求出a+b+c+d==n
四個不同數中至少三個數為近素數
解析:
先列出前三個近素數:6 10 14
那麼滿足條件的最小組合為:6 10 14 1
那麼n<31,肯定無解
而對於n>=31來講,可能存在重複,而這種構造方式無非就是與它三個重複,所以直接一個一個判就可以了
#include<bits/stdc++.h> #include<iostream> #include<cstring> #include<string.h> #include<cmath> #include<map> using namespace std; typedef long long ll; const int maxn=1e5+20; int a[maxn],p[maxn],s[maxn]; int main() { int t; scanf("%d",&t); while(t--) { int n; cin>>n; if(n<31) cout<<"NO"<<endl;else { cout<<"YES"<<endl; // cout<<"6 10 14 "<<n-30<<endl; int md=n-30; if(md==6||md==10||md==14) cout<<"6 10 15 "<<md-1<<endl; else cout<<"6 10 14 "<<n-30<<endl; } } }
B:http://codeforces.com/contest/1388/problem/B
題意:
n
求一個n位數x,滿足:將每位變成二進位制,末尾去掉n位後,它的十進位制為最大,而且x為最小。
解析:
7:111
8:1000
9:1001
很明顯,刪除8是最好的,因為它的0最多,9做為前幾位也是最大的。長度越長,越大。
n<=4,最後一位為8
n>4,n/4向上取整即可,便為8的數目
#include<bits/stdc++.h> #include<iostream> #include<cstring> #include<string.h> #include<cmath> #include<map> using namespace std; typedef long long ll; const int maxn=1e5+20; int a[maxn]; int main() { int t; scanf("%d",&t); while(t--) { int n; cin>>n; if(n<=4) { for(int i=2;i<=n;i++) cout<<"9"; cout<<"8"<<endl; }else { int md; if(n%4==0) md=n/4; else md=n/4+1; int yu=n-md; for(int i=1;i<=yu;i++) cout<<"9"; for(int i=1;i<=md;i++) cout<<"8"; cout<<endl; } } }