蓝桥杯真题31日冲刺国一 | 每日题解报告 第十九天

简介: 大噶好,我系泡泡,今天的题难度很高(我是fw)有能力的自己搞一下,省赛的同学今天就当放松一下

一、合法日期


题目链接:肥肠简单的模拟题


题目要求:让你判断一个月份和天数在2021年存不存在


解题思路:直接if判断即可!


#include <iostream> 
using namespace std;
int main()
{
  int n,m;
  cin>>n>>m;
  if(n>12||n<1)
  {
    cout<<"no";
    return 0;
  }
  if(n==1||n==3||n==5||n==7||n==8||n==10||n==12)
  {
    if(m<=31&&m>=1)
    {
      cout<<"yes";
      return 0;
    }
  }
  else if(n==2)
  {
    if(m<=28&&m>=1)
    {
      cout<<"yes";
      return 0;
    }
  }
  else
  {
    if(m<=30&&m>=1)
    {
      cout<<"yes";
      return 0;
    }
  }
  cout<<"no";
  return 0;
}


二、古堡算式


题目链接:福尔摩斯与花生的爱恨情仇


题目要求:


福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:


ABCDE ∗ ?=EDCBA


他对华生说:“ABCDE 应该代表不同的数字,问号也代表某个数字!”


华生:“我猜也是!”


于是,两人沉默了好久,还是没有算出合适的结果来。


请你利用计算机的优势,找到破解的答案。


把 ABCDE 所代表的数字写出来。


解题思路:


五个循环就可以解决这个问题,枚举每一个数字,如果他们不同就进入相乘的过程,定义两个变量,第一个存abcde,第二个edcba,如果abcde%edcba为0那么输出!!(福尔摩斯有这么笨吗)


#include<stdio.h>
int main()
{
  int a,b,c,d,e,num1,num2;
  for(a=1;a<10;a++)
  {
  for(b=0;b<10;b++)
  {
    for(c=0;c<10;c++)
    {
    for(d=0;d<10;d++)
    {
      for(e=1;e<10;e++)
      {
      if(a!=b && a!=c && a!=d && a!=e && b!=c && b!=d && b!=e && c!=d && c!=e && d!=e)
      {
        num1=e+d*10+c*100+b*1000+a*10000;
        num2=a+b*10+c*100+d*1000+e*10000;
        if(num2%num1==0)
        {
        printf("%d",num1);
        }
      }
      }
    }
    }
  }
  }
  return 0;
}


三、估计人数


题目链接:找人数


题目要求:


31.png


解题思路:


二分图或者匈牙利或者bfs判断(这个数据不大所以爆可以,群里的怂佬爆的,不过他是java


或者最短路啥的都能过不过俺实在是不会,不过我找了一个大佬的二分图题解来给大家欣赏一下,


这是国赛题,一般也没这么难得我感觉,需要的大佬可看看


#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 410, M = 100010, K = 22, INF = 0x3f3f3f3f;
int h[N], e[M], f[M], ne[M], idx;
void add(int a, int b, int c)
{
    e[idx] = b, f[idx] = c, ne[idx] = h[a], h[a] = idx ++;
    e[idx] = a, f[idx] = 0, ne[idx] = h[b], h[b] = idx ++;
}
int n, m, S, T;
int hs[N], d[N], q[N];
bool bfs()
{
    memset(d, -1, sizeof d);
    d[S] = 0;
    int hh = 0, tt = -1;
    q[ ++ tt] = S;
    hs[S] = h[S];
    while(hh <= tt)
    {
        int u = q[hh ++];
        for(int i = h[u]; ~i; i = ne[i])
        {
            int j = e[i];
            if(d[j] == -1 and f[i])
            {
                d[j] = d[u] + 1;
                hs[j] = h[j];
                if(j == T)  return true;
                q[ ++ tt] = j;
            }
        }
    }
    return false;
}
int find(int u, int limit)
{
    if(u == T)  return limit;
    int flow = 0;
    for(int i = hs[u]; ~i and flow < limit; i = ne[i])
    {
        hs[u] = i;
        int j = e[i];
        if(d[j] == d[u] + 1 and f[i])
        {
            int t = find(j, min(f[i], limit - flow));
            if(!t)  d[j] = -1;
            f[i] -= t, f[i ^ 1] += t, flow += t;
        }
    }
    return flow;
}
int dinic()
{
    int res = 0, flow;
    while(bfs())  while(flow = find(S, INF))  res += flow;
    return res;
}
char s[K][K];
int num[K][K];
int g[N][N];
int main()
{
    memset(h, -1, sizeof h);
    int n, m;
    scanf("%d%d", &n, &m);
    for(int i = 1; i <= n; i ++)  scanf("%s", s[i] + 1);
    S = N - 2, T = N - 1;
    int cnt = 0;
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= m; j ++)
            if(s[i][j] == '1')
                num[i][j] = ++ cnt;
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= m; j ++)
            if(num[i][j])
            {
                int a = num[i][j];
                add(S, a, 1);
                add(cnt + a, T, 1);
                int b = num[i + 1][j];
                if(a)  g[a][b] = true;
                b = num[i][j + 1];
                if(b)  g[a][b] = true;
            }
    for(int k = 1; k <= cnt; k ++)
        for(int i = 1; i <= cnt; i ++)
            for(int j = 1; j <= cnt; j ++)
                if(g[i][k] and g[k][j])  g[i][j] = true;
    for(int i = 1; i <= cnt; i ++)
        for(int j = 1; j <= cnt; j ++)
            if(g[i][j])
                add(i, cnt + j, 1);
    printf("%d\n", cnt - dinic());
    return 0;
}


题解大佬是来自acwing的滑稽_ωノ


四、蓝跳跳


题目链接:蓝跳跳(杀人啦


题目要求:


32.png


解题思路:


这题直接跳过 太难了 A组国赛题(执佬太杀我了)


五、乘积最大


题目链接:大大大


题目要求:


给定N个整数A1, A2, ... AN。请你从中选出K个数,使其乘积最大。


请你求出最大的乘积,由于乘积可能超出整型范围,你只需输出乘积除以1000000009的余数。


注意,如果X<0, 我们定义X除以1000000009的余数是负(-X)除以1000000009的余数。


即:0-((0-x) % 1000000009)


解题思路:


dp,寄!

目录
相关文章
|
存储
【蓝桥杯冲刺】蓝桥杯12届省赛C++b组真题-填空题
【蓝桥杯冲刺】蓝桥杯12届省赛C++b组真题-填空题
98 1
|
测试技术
【蓝桥杯冲刺】蓝桥杯13届省赛C++b组真题-A~E题
【蓝桥杯冲刺】蓝桥杯13届省赛C++b组真题-A~E题
140 0
|
人工智能 测试技术 BI
【蓝桥杯冲刺】蓝桥杯11届省赛C++b组真题-编程题
【蓝桥杯冲刺】蓝桥杯11届省赛C++b组真题-编程题
106 0
【蓝桥杯冲刺】蓝桥杯11届省赛C++b组真题-填空题
【蓝桥杯冲刺】蓝桥杯11届省赛C++b组真题-填空题
124 0
【蓝桥杯冲刺】日期类专题特训
【蓝桥杯冲刺】日期类专题特训
44 0
|
人工智能 测试技术
【蓝桥杯冲刺】蓝桥杯12届省赛C++b组真题-编程题
【蓝桥杯冲刺】蓝桥杯12届省赛C++b组真题-编程题
105 0
|
机器学习/深度学习 存储 测试技术
蓝桥杯冲刺-倒数第八天-省赛题
蓝桥杯冲刺-倒数第八天-省赛题
114 0
|
机器学习/深度学习 Python
【蓝桥杯真题】16天冲刺 Python
【蓝桥杯真题】16天冲刺 Python
213 0
【蓝桥杯真题】16天冲刺 Python
|
算法 Python 容器
【蓝桥杯真题】18天Python组冲刺 心得总结
【蓝桥杯真题】18天Python组冲刺 心得总结
177 0
【蓝桥杯真题】18天Python组冲刺 心得总结
蓝桥杯倒数七天冲刺国一之每日复习第六天
大家好,我是泡泡,今天是复习第六天!今天有事,稍微水一下
105 0