2019年第十届蓝桥杯B组题目个人想法

填空题

第一题,暴力、dfs都可以,20^5,注意不要同个人任两个以上位置,答案490,五人分别是97、99、98、98、98;

第二题,10进制转26进制,感觉找不到一个值代表0很奇怪,不过影响并不是很大,暴力算出答案也是BYQ,就没管了。

第三题,dp[i] = (dp[i-1] + dp[i-2] + dp[i-3]) % 10000;

第四题,求和为2019的三个互不相同的数且不出现2和4的方案数。还是暴力,为了不重复,我枚举a∈[2019/3,2017],b∈[1,a),然后c就是2019-a-b,当c<b&&c>0且三个数符合题目要求则方案数++,算出答案40785;

第五题,好像解法只有一种emm,所以dfs也是行得通emm。
我用的是bfs+记录路径,算出来跟大佬们说的186个好像也差不多吧。。

程序题

第六题,判断位数,加起来,下一题;

第七题,完全二叉树,又按照顺序,说明n=2^k-1,那么对于i∈[1,k],x∈[2的(i-1)次方,2的i次方-1]为一层,加起来,判断结果即可,两个注意点:①答案可能为负 ②要开long long;

第八题,两种情况
①如果全部相同,输出n;(比赛没想到这种情况);
②如果存在不同,就是一个正常的等差数列,排个序,算相邻项差,取gcd即可,项数=(末项-首项)/公差+1;

第九题,题意理解不得,各种说法五花八门,就只说说自己的想法,排序,m个数减掉,后面的数加起来,好的,样例过了。那就过了。

第十题,题意给你n个数,你可以进行无限次操作,操作为取一个i∈[2,n-1],使i两边+ai,然后ai-=2ai,问最后序列绝对值最大的数最小为多少?
(个人想法)

首先翻译一句话,ai-=2ai <=> ai = -ai;
数据范围ai∈[0,1e9],n范围3e5,说明时间复杂度最差也就nlogn,可以联想到二分答案,然而我们需要在O(n)的时间内check了。

要check首先要算几个数学东西:
设二分答案的结果mid,假设Ai处绝对值大于mid,那么现在要解决Ai的问题,再假设要从正方向使Ai的绝对值降下来(反方向类似),则有以下两种方法:
①若sgn(Ai+1) = -sgn(Ai),则可以操作一遍Ai+1;
②若sgn(Ai+1 + Ai+2) = -sgn(Ai),则可以操作Ai+1,Ai+2,Ai+1,具体化简过程我就不详细介绍,改变完后,Ai~Ai+3会变成以下情况;

Ai Ai+1 Ai+2 Ai+3
Ai+Ai+1+Ai+2 -Ai+2 -Ai+1 Ai+3+Ai+1+Ai+2

对于以上两种方法,我们可以发现,如果按照同样的方式再进行一遍,就可以将变换消除,这有利于我们进行修正(后面再讲)。

以上,至少在我现在看来,已经可以囊括单方向的修改方式了,也许有些疑问,不过我一一解答:
Ⅰ、这样修改完,似乎还有别的情况,比如对于②的情况,还可以修改Ai+1,这时又是一种新的情况,为什么不考虑?
当你修改完后,Ai又会变小,我当前只为了更好的解决Ai的问题,而解决完Ai绝对值过大的后,就可以将影响往后推,然后再考虑后面的问题。这也扯到我想到这方法可能可行的原因,假设当前方向解决失败,说明只靠当前方向是解决不了问题,只能反方向进行修改,而假设反方向修改失败,那么说明无解
Ⅱ、打完上个问题后忘了,算了,想起来再打或如果你看这篇文章有疑问欢迎私聊我;

官方题解还没出,那现在假设方法可行吧:
Ⅰ、从操作步骤上看,②的步骤包括①,可以先判断①,再判断②;
Ⅱ、如何实现,我的方法是先正着方向扫一遍过去,这样就剩下无法正方向消掉的值(包括结尾),然后再反方向扫一遍,如果这时那些值仍无法消掉,则说明无解,反之所有值都达成,则成功。

如果以上方法合理,则说明O(n)的check是存在可能的,当然可能需要解决下常数什么的问题,毕竟感觉评测机不太行,,,,

代码,在考场,,,不知如何,,趁题解还没出,让本蒟蒻先云一发吧hh

如需转载,请私聊博主谢谢,转载内容请注明出处。

猜你喜欢

转载自blog.csdn.net/aiqiyizz/article/details/88785244