题解:P9239 [蓝桥杯 2023 省 B] 填空问题
试题 A:日期统计
这道题目我们直接暴力枚举就好了。
什么?你说会超时?这道题目又不是常规题目,只要提交答案就好了,超时也没什么,总不至于算都算不出来吧。
注意:枚举的时候要注意细节。不要因为细节把自己心态搞炸。
代码实现
#include<bits/stdc++.h>
using namespace std;
int a[105],tmp,sum,tmp2,mon[15]={0,31,28,31,30,31,30,31,31,30,31,30,31},n=100;//初始定义,并且将月份天数储存下来(索引从1起)
set<int> dates;
int main()
{
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
for(int k=j+1;k<=n;k++)
{
for(int l=k+1;l<=n;l++)
{
tmp=a[i]*1000+a[j]*100+a[k]*10+a[l];
if(tmp!=2023) continue;//若月份不为2023,直接跳过
for(int i1=l+1;i1<=n;i1++)
{
if(a[i1]!=0&&a[i1]!=1) continue;//月份第一位必定为0或1
for(int i2=i1+1;i2<=n;i2++)
{
sum=a[i1]*10+a[i2];
if(sum<1||sum>12) continue;//检查月份是否合法
for(int i3=i2+1;i3<=n;i3++)
{
for(int i4=i3+1;i4<=n;i4++)
{
tmp2=a[i3]*10+a[i4];
if(tmp2>=1&&tmp2<=mon[sum]) dates.insert(20230000 + sum*100 + tmp2);//检查天数是否合法,若合法计入答案集合
}
}
}
}
}
}
}
}
printf("%d",dates.size());//输出答案
return 0;
}
最终答案:\(235\)。
试题 B:01 串的熵
写完了看了一下题解区,发现好多直接套公式的。其实这道题目根本不用直接套公式,套公式反而还麻烦一些。
我们依旧是枚举 \(0\) 的数量,通过 \(0\) 的数量确定 \(1\) 的数量。但是在答案更新上有大不同。
我认为直接套题目给的公式很麻烦,这里给出一个推柿子使得题目更加简单的做法(推完之后发现题解区有个跟我柿子推得差不多的)。
柿子推了一个晚上。
应该是自己太蒻了,其实柿子很好推。
- \(H(S)=-\sum_{i=1}^np(x_i) \log2(p(x_i))\)
- \(H(S)=-\sum_{i=1}^n([x_i=1]\frac{n_1}{n}\log2(\frac{n_1}{n})+[x_i=0]\frac{n_0}{n}\log2(\frac{n_0}{n}))\)
- \(H(S)=-(n_1\frac{n_1}{n}\log2(\frac{n_1}{n})+n_0\frac{n_0}{n}\log2(\frac{n_0}{n}))\)
- \(H(S)=-(\frac{{n_1}^2}{n}\log2(\frac{n_1}{n})+\frac{{n_0}^2}{n}\log2(\frac{n_0}{n}))\)
那么,最后的就是公式了。我们枚举 \(n_0\) 的情况,然后将公式套进去,将得出的结果与以前的结果比较,最后得到的就是最接近的答案了。
#include<bits/stdc++.h>
using namespace std;
int n=23333333,ans1;
double shang=11625907.5798,ans2;
int main()
{
for(int i=0;i<=n;i++)
{
int j=n-i;
double tmp=-(j*1.0*j/n*log2(j*1.0/n)+i*1.0*i/n*log2(i*1.0/n));//套公式
if(abs(tmp-shang)<abs(ans2-shang))//更新最接近的值
{
ans2=tmp;
ans1=i;
}
}
printf("%d",ans1);//输出答案
return 0;
}
最终答案:\(11027421\)。
AC 代码
记录。
#include<iostream>
using namespace std;
int main() {
string ans [] = {
"235",
"11027421",
};
char T;
cin >> T;
cout << ans[T - 'A'] << endl;
return 0;
}

浙公网安备 33010602011771号