2019 蓝桥杯省赛 B 组模拟赛(一)

F:找质数

一天蒜头君猜想,是不是所有的偶数(除了 22),都可以用两个质数相加得到呢?于是聪明的蒜头君就找你来验证了。

输入格式

第一行输入一个整数 tt 表示测试组数。

接下来 tt 行,每行一个整数 nn。

输出格式

输出两个整数,因为答案可能有多个,所有要求输出的这两个整数是所有答案中字典序最小的。

 

这个真鸡肋,居然卡输入输出。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
#define  inf 0x3f3f3f
using namespace std;
bool visit[10100000];
int prime[10000000];
int num;

void init_prim()
{
    int n=1000000;
    memset(visit, true, sizeof(visit));
    num = 0;
    for (int i = 2; i *i<= n; ++i)
    {
        if (visit[i] == true)
        {
            num++;
            prime[num] = i;
        }
        for (int j = 1; ((j <= num) && (i * prime[j] <= n));  ++j)
        {
            visit[i * prime[j]] = false;
            if (i % prime[j] == 0) break;
        }
    }
}


int main(){
    int t,n;
    init_prim();
    visit[1]=0;
    visit[0]=0;
    scanf("%d",&t);
    while(t--){
        cin>>n;
        for(int i=1;i<=num;i++){
            if(visit[prime[i]]&&visit[n-prime[i]]){
                printf("%d %d\n",prime[i],n-prime[i]);
                break;
            }
        }
    }
    return 0;
}

G:后缀字符串

一天蒜头君得到 nn 个字符串 sisi​,每个字符串的长度都不超过 1010。

蒜头君在想,在这 nn 个字符串中,以 sisi​ 为后缀的字符串有多少个呢?

这道题利用map进行预处理查找(一开始没想到暴力超时了orz)

 #include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
#define  inf 0x3f3f3f
using namespace std;
string s[100000+10];
mapmp;
int main(){
    int n;
    scanf("%d",&n);
    for(int i=0;i>s[i];
    }
    mp.clear();
    for(int i=0;i

H:轻重搭配

n 个同学去动物园参观,原本每人都需要买一张门票,但售票处推出了一个优惠活动,一个体重为 xx 的人可以和体重至少为 2x2x 配对,这样两人只需买一张票。现在给出了 nn 个人的体重,请你计算他们最少需要买几张门票?

贪心,从中间位置开始查找

#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
#define  inf 0x3f3f3f
using namespace std;
int a[1008611];
int main(){
    int n;
    cin>>n;
    for(int i=0;i>a[i];
    }
    sort(a,a+n);
    int mid=n/2-1;
    int j=n-1;
    int ans=0;
    for(int i=mid;i>=0;i--){
        if(a[j]<2*a[i]){
            ans++;
        }
        else{
            j--;
            ans++;
        }
    }
    if(j!=mid){
        ans+=j-mid;
    }
    cout<

I:抠图

dfs/bfs 搜索所有可达位置并标记

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
#define  inf 0x3f3f3f
using namespace std;
int d[4][2]={0,1,0,-1,1,0,-1,0};
int mp[505][505],vis[505][505];
    int n,m;
void dfs(int x,int y){
    for(int k=0;k<4;k++){
        int dx=x+d[k][0];
        int dy=y+d[k][1];
        if(!vis[dx][dy]&&mp[dx][dy]&&dx>=0&&dx=0&&dy

 

你可能感兴趣的:(日常训练)