蓝桥杯刷题日记DAY01

问题描述

小蓝现在有一个长度为 100100 的数组,数组中的每个元素的值都在 00 到 99 的范围之内。数组中的元素从左至右如下所示:

5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2
7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 3 8 5 1 6 3 4 6 7 0 7 8 2 7 6 8 9 5 6 5 6 1 4 0 1
0 0 9 4 8 0 9 1 2 8 5 0 2 5 3 3

现在他想要从这个数组中寻找一些满足以下条件的子序列:

  1. 子序列的长度为 88;
  2. 这个子序列可以按照下标顺序组成一个 yyyymmddyyyymmdd 格式的日期,并且要求这个日期是 20232023 年中的某一天的日期,例如 2023090220230902,2023122320231223。yyyyyyyy 表示年份,mmmm 表示月份,dddd 表示天数,当月份或者天数的长度只有一位时需要一个前导零补充。

请你帮小蓝计算下按上述条件一共能找到多少个不同的 20232023 年的日期。对于相同的日期你只需要统计一次即可。

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

运行限制

语言最大运行时间最大运行内存
C++1s256M
C1s256M
Java2s256M
Python33s256M
PyPy33s256M
Go3s256M
JavaScript3s256M

总通过次数: 11655  |  总提交次数: 15099  |  通过率: 77.2%

难度: 困难   标签: 2023, 暴力, 枚举, 省赛

题解

#include <iostream>
using namespace std;
int main()
{
  int day[12]={31,28,31,30,31,30,31,31,30,31,30,31};
  int a[100]={5, 6, 8, 6, 9, 1, 6, 1, 2, 4, 9, 1, 9, 8, 2, 3, 6, 4, 7, 7,
        5, 9, 5, 0, 3, 8, 7, 5, 8, 1, 5, 8, 6, 1, 8, 3, 0, 3, 7, 9,
        2, 7, 0, 5, 8, 8, 5, 7, 0, 9, 9, 1, 9, 4, 4, 6, 8, 6, 3, 3,
        8, 5, 1, 6, 3, 4, 6, 7, 0, 7, 8, 2, 7, 6, 8, 9, 5, 6, 5, 6,
        1, 4, 0, 1, 0, 0, 9, 4, 8, 0, 9, 1, 2, 8, 5, 0, 2, 5, 3, 3};
  int s=0;
  for(int mon=1;mon<=12;mon++){
    for(int d=1;d<=day[mon-1];d++){
        int tar[8]={2,0,2,3,mon/10,mon%10,d/10,d%10};
        int k=0;
        for(int i=0;i<100;i++){
            if(a[i]==tar[k])k++;
            if(k==8){
            s++;
            break;
        }
        }
    }
  }
  cout<<s<<endl;
  return 0;
}

没有使用到什么算法技巧,暴力解决,其中有一些小技巧,使用数组存储各个月份的日期和月份,

将各种可能的子链转化成一个数组,通过遍历所给数组array最后检验target数组是否完全遍历即能否从所给array找到全部目标数字。

问题描述

对于一个长度为 nn 的 01 串 S=x1x2x3…xnS=x1​x2​x3​…xn​,香农信息熵的定义为 H(S)=H(S)= −Σ1np(xi)log⁡2(p(xi))−Σ1n​p(xi​)log2​(p(xi​)),其中 p(0),p(1)p(0),p(1) 表示在这个 01 串中 0 和 1 出现的占比。

比如,对于 S=100S=100 来说,信息熵 H(S)=−13log⁡2(13)−23log⁡2(23)−23log⁡2(23)=1.3083H(S)=−31​log2​(31​)−32​log2​(32​)−32​log2​(32​)=1.3083。

对于一个长度为 2333333323333333 的 01 串, 如果其信息熵为 11625907.579811625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次?

答案提交

这是一道结果填空的题, 你只需要算出结果后提交即可。本题的结果为一 个整数, 在提交答案时只填写这个整数, 填写多余的内容将无法得分。

运行限制

语言最大运行时间最大运行内存
C++1s256M
C1s256M
Java2s256M
Python33s256M
PyPy33s256M
Go3s256M
JavaScript3s256M

总通过次数: 9114  |  总提交次数: 10313  |  通过率: 88.4%

难度: 困难   标签: 2023, 暴力, 枚举, 省赛

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
  double n= 23333333;
  double sum ;
  int x;
  for(x=0;x<=n/2;x++){
      sum=0;
      sum-=x*(x/n)*log2(x/n)+(n-x)*((n-x)/n)*log2((n-x)/n);
      if(sum>11625907.57&&sum<11625907.58){
        cout<<x;
        break;
      }
  }
  return 0;
}

这道题属于看懂了题目不难,看不懂题目就做不出来,没有算法,按照题意的公式直接遍历暴力解即可。

### 关于蓝桥杯竞赛中的C语言回文字符串练习及其解法 对于蓝桥杯竞赛中涉及的回文字符串问题,在C语言环境下可以通过多种方式实现。下面提供一种常见的解决方案,该方案不仅适用于比赛环境下的快速编写需求,同时也能够帮助理解如何高效处理此类逻辑。 #### 定义与初步准备 首先定义什么是回文串——即正读反读均相同的序列。为了简化输入输出过程并提高程序可移植性,这里假设已经通过标准输入获取了一个不含空白符的纯字母数字组成的字符串[^1]。 #### 实现思路 核心在于构建两个指针分别指向待检测字符串首尾两端并向中间靠拢比较对应位置上的字符是否相等直到相遇为止;如果过程中遇到不匹配的情况则立即返回不是回文的结果;反之当循环结束仍未发现差异时说明给定字符串确实构成回文特性。 ```c #include <stdio.h> #include <string.h> int isPalindrome(char str[]) { int i = 0; int j = strlen(str) - 1; // 获取字符串长度减去终止符'\0'的位置 while(i < j){ if(str[i++] != str[j--]) return 0; // 若有任意一对不同,则非回文 } return 1; // 所有对比项相同视为回文 } void main(){ char testStr[]="level"; if(isPalindrome(testStr)){ printf("%s 是回文。\n",testStr); }else{ printf("%s 不是回文。\n",testStr); } } ``` 上述代码展示了基本框架以及具体操作细节,其中`isPalindrome()`函数负责执行实际判定工作而`main()`部分用于测试验证目的。 #### 进一步优化建议 考虑到可能存在的大小写字母混杂情况或是其他特殊符号干扰因素,在正式比赛中应当先对原始数据做适当预处理比如统一转换成小写形式或者忽略掉所有非字母字符后再进行后续分析以确保准确性[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值