1. 程式人生 > 實用技巧 >React Hook~部分實用鉤子

React Hook~部分實用鉤子

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;
        }
    }    
}