草庐IT

2021年第12届蓝桥杯国赛做题记录

m0-51303687 2023-03-28 原文

A:带宽:计算200Mbps=?MB/s。常识题,答案200/8=25

先打一个素数表,然后遍历即可。答案1903

bool check(int n):
while (m > 0) {
	int i = m % 10;
	if (i != 2 && i != 3 && i != 5 && i != 7)
		return 0;
	m /= 10;
}
return 1;
int main():
int n=20210605,res=0;
int k=init(n);
for (int i = 0; i < k; i++) {
	if (check(p[i])) {
		//printf("%d\n",i);
		res++;
	}
}


暴力即可。可以写一个简单的日期类。答案977

bool check(Date d) {
    string s=d.toString();
    int x=0;
    for(char c:s)    x+=c-'0';
    int y=(int)sqrt(x);
    //if(y*y==x) printf("%d\n",x);
    return y*y==x;
}
main:
while(!(now==end)) {
    if(check(now)) {
        res++;
        //puts(now.toString().c_str());
    }
    now=now.next();
}


不会


E:小写转大写:送分题,s[i]=s[i]-'a'+'A'

思路1:约定f(x)=(x*(x+1))/2。不难得出前p段的数字个数等于第p段所有数字的和
首先由等差数列求和公式算出\(l_i\)\(r_i\)分别位于哪一段。(可用二分法)如果位于相同的段则要特别处理,(这点以后一定要注意)。
否则,假设二者分别位于pl与pr段,则(pl,pr)之间的段都可以用f(i)直接算出来,
再算出第l个数在pl段中是第几个(也就是算出第l个数的值,假设为left),办法是算出前pl-1段有多少个(即f(pl-1)),用l-left即得;最后计算f(pl)-f(left)即可
同理算出第r个数在pr段中是第几个。这种方法对应70%数据。

inline int part(llong i) {
    int p=1;
    int l=1,r=1e7;
    while(l<r) {  //二分查找,相当于lower_bound
    	p=(l+r)/2;  //假设第p段
		llong st=calc(1,p-1)+1; //计算第p段第一项
		if(st>i) {  //如果i于st,则说明答案在右半段
			r=p;
		}
		else {
			l=p+1;
		}
	}
    return l-1;
}
int main() {
//省略输入
    while(t--) {
        llong l,r,res=0;
        scanf("%lld%lld",&l,&r);
        int par_l=part(l),par_r=part(r);  //计算二者是在哪段
        //printf("%d %d\n",par_l,par_r);
        for(int i=par_l+1; i<par_r; i++) {
            res+=calc(1,i);
        }
        llong left=l-calc(1,par_l-1),right=r-calc(1,par_r-1);  //单独处理“左边距”与“右边距”
        if(par_l!=par_r) {
            res+=calc(left,par_l)+calc(1,right);
        }
        else {
        	res+=calc(left,right);
		}
        printf("%lld\n",res);
    }
}

思路2:针对main()中for循环,可在思路1的基础上推公式。可过全部数据。
个人觉得这种题适合出在蓝桥杯中,毕竟很多解法都能拿部分分。


方法1:暴力,能过40%
方法2:找循环节,把循环节存下来。但不排除爆空间风险。能过>=80%

char tt[M]; //使用char[]提高性能
int main() {
    NO_SYNC;
    int n;llong t;
    cin>>n>>t;
    string s,org;
    cin>>s;
    org=s;
    strs.reserve(n);
    strs.push_back(org);
    do {
        tt[0]=s[0];
        for(int i=1; i<n; i++) {
            tt[i]= (char)((s[i]-'0')^(s[i-1]-'0'))+'0';
        }
        s=tt;
        strs.push_back(s);
    } while(s!=org);
    strs.pop_back();
    cout<<strs[t%strs.size()];
}


若最高位为0,则只要在低位中取k个1即可。这部分可利用组合数公式。
最高位为1,符合条件的最小数为100....11b(共t位,有k个1,除最高位外的k-1个1均在最低位连续排列)最大为min(n,111....00b)(共t位前K个为1)。只要遍历这部分数即可。如果利用__builtin_popcount复杂度大约\(O(\frac{n}{2})\)。虽然还是过不了,不过数据出的好的话能混60%。
当然,考场上为节约时间这部分就不要考虑什么最小数最大数了。虽然可能少几分但有时间做别的题目。
正解数位DP,详参:https://blog.csdn.net/As_zyh/article/details/117637080



不会,但应该属于RMQ问题,可以设左括号为0,右括号为1,用线段树或分块说不定可行。



首先a ^ b ^ c == 0-->a ^ b == c,由异或的定义知这个式子的三个数可以任意互换位置。因此只要算出a<b<c时的结果*6即可。
这里还有一个优化:设f[i]=\(\lfloor log_2i \rfloor+1\),则对任意的i,若j<f[i]则不可能有i ^ j > j,因此从f[i]开始遍历即可。
同上,考试时节约时间就不要往这上想了。反正不太可能会多一分

自己做能有5+5+10+15+10+16+6+5=72分,在考场上就不知道能怎样了。

有关2021年第12届蓝桥杯国赛做题记录的更多相关文章

  1. 深度学习12. CNN经典网络 VGG16 - 2

    深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG

  2. 蓝桥杯备赛(二) - 2

    目录前言: 一、ASC分析代码实现二、 卡片分析代码实现三、 直线分析代码实现四、货物摆放分析代码实现小结:前言:  在刷题的过程中,发现蓝桥杯的题目和力扣的差别很大。让人有一种不一样的感觉,蓝桥杯题目偏向对于实际问题用编程去的解决,而力扣给人感觉很锻炼自己的编程思维,逻辑能力。两者结合去刷,相信会有不一样的收获。 一、ASC  已知大写字母A的ASCII码为65,请问大写字母L的ASCII码是多少?分析  这道题目看上去很简单,我们需确定自己计算的准确,所以我建议用编程去解决。代码实现publicclassTest8{publicstaticvoidmain(String[]args){Sy

  3. ruby-on-rails - 无法构建 gem native 扩展 (mkmf (LoadError)) - Ubuntu 12.04 - 2

    这个问题在这里已经有了答案:Unabletoinstallgem-Failedtobuildgemnativeextension-cannotloadsuchfile--mkmf(LoadError)(17个答案)关闭9年前。嘿,我正在尝试在一台新的ubuntu机器上安装rails。我安装了ruby​​和rvm,但出现“无法构建gemnative扩展”错误。这是什么意思?$sudogeminstallrails-v3.2.9(没有sudo表示我没有权限)然后它会输出很多“获取”命令,最终会出现这个错误:Buildingnativeextensions.Thiscouldtakeawhi

  4. ruby - 使用 OpenSSL ruby​​ 从一个 .p12 文件中提取多个 key - 2

    我想知道如何从Apple.p12文件中提取key。根据我有限的理解,.p12文件是X504证书和私钥的组合。我看到我遇到的每个.p12文件都有一个X504证书和至少一个key,在某些情况下有两个key。这是因为每个.p12都有一个Apple开发人员key,有些还有一个额外的key(可能是Appleroot授权key)。我只考虑那些具有两个key的.p12文件是有效的。我的目标是区分具有一个key的.p12文件和具有两个key的.p12文件。到目前为止,我已经使用OpenSSL来检查X504文件和任何.p12的key。例如,我有这段代码可以检查目录中的所有.p12文件:Dir.glob(

  5. ruby - 为什么 openssl 在 windows 上产生错误但在 centos 上不产生错误:PKCS12_parse: mac verify failure (OpenSSL::PKCS12::PKCS12Error) - 2

    require'openssl'ifARGV.length==2pkcs12=OpenSSL::PKCS12.new(File.read(ARGV[0]),ARGV[1])ppkcs12.certificateelseputs"Usage:load_cert.rb"end运行它会在Windows上产生错误,但在Linux上不会。错误:OpenSSL::PKCS12::PKCS12Error:PKCS12_parse:macverifyfailurefrom(irb):21:ininitializefrom(irb):21:innewfrom(irb):21fromC:/Ruby192/

  6. 蓝桥杯C/C++VIP试题每日一练之报时助手 - 2

    ?作者主页:静Yu?简介:CSDN全栈优质创作者、华为云享专家、阿里云社区博客专家,前端知识交流社区创建者?社区地址:前端知识交流社区?博主的个人博客:静Yu的个人博客?博主的个人笔记本:前端面试题个人笔记本只记录前端领域的面试题目,项目总结,面试技巧等等。接下来会更新蓝桥杯官方系统基础练习的VIP试题,依然包括解题思路,源代码等等。问题描述:给定当前的时间,请用英文的读法将它读出来。时间用时h和分m表示,在英文的读法中,读一个时间的方法是:  如果m为0,则将时读出来,然后加上“o’clock”,如3:00读作“threeo’clock”。  如果m不为0,则将时读出来,然后将分读出来,如5

  7. ruby-on-rails - macOS 10.12 Sierra 上的 bundle 错误 - 2

    Ignoringbinding_of_caller-0.7.2becauseitsextensionsarenotbuilt.Try:gempristinebinding_of_caller--version0.7.2Ignoringbyebug-9.0.6becauseitsextensionsarenotbuilt.Try:gempristinebyebug--version9.0.6Ignoringcapybara-webkit-1.11.1becauseitsextensionsarenotbuilt.Try:gempristinecapybara-webkit--versio

  8. ruby - 如何在 ubuntu 12.0.4 上将 usr/local/bin 添加到路径环境变量? - 2

    我刚刚在Ubuntu12.0.4上安装了ruby​​.1.8.6。我正在从一本书中学习ruby​​,在安装过程之后它说"Onceit'scompleted,youshouldadd/usr/local/bintoyourPATHenvironmentvariable.I'llassumethat,beingaLinuxuser"我被困住了,因为这个人的假设是错误的。如何将usr/local/bin添加到路径环境变量中? 最佳答案 您可以将此添加到您的~/.bashrc文件中:PATH=$PATH:/usr/local/bin如果你不

  9. ruby - IntelliJ IDEA 12 不会在 rails/ruby 的断点处停止 - 2

    我有IDEA12,无法在Rails/Ruby中正确使用调试器[类似的问题是这个Idea11breakpoints&ruby].当我第一次在rails/ruby应用程序上按下DEBUG时,它正确地安装了ruby​​-debug-base19x和ruby​​-debug-ide。发布一个gem列表|grepdebug显示这些gem:debugger-ruby_core_source(1.2.2)ruby-debug-base19x(0.11.30.pre12)ruby-debug-ide(0.4.17.beta16)调试[localdebug]正在成功启动,我在控制台中有这个:/home/

  10. 十四届蓝桥青少组模拟赛Python-20221108 - 2

    十四届蓝桥青少组模拟赛Python-20221108T1.二进制位数十进制整数2在十进制中是1位数,在二进制中对应10,是2位数。十进制整数22在十进制中是2位数,在二进制中对应10110,是5位数。请问十进制整数2022在二进制中是几位数?print(len(bin(2022))-2)#运行结果:11T2.晨跑小蓝每周六、周日都晨跑,每月的1、11、21、31日也晨跑。其它时间不晨跑。已知2022年1月1日是周六,请问小蓝整个2022年晨跑多少天?#样例代码1ls=[0,31,28,31,30,31,30,31,31,30,31,30,31]ans=0k=6foriinrange(1,13)

随机推荐