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

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

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

先打一个素数表,然后遍历即可。答案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++;
    }
}

2021年第12届蓝桥杯国赛做题记录
暴力即可。可以写一个简单的日期类。答案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();
}

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

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

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

思路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(li) {  //如果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

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

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

方法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

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

若最高位为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

2021年第12届蓝桥杯国赛做题记录
不会,但应该属于RMQ问题,可以设左括号为0,右括号为1,用线段树或分块说不定可行。

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

首先 a ^ b ^ c == 0–>a ^ b == c,由异或的定义知这个式子的三个数可以任意互换位置。因此只要算出a

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

Original: https://www.cnblogs.com/m0-51303687/p/16324164.html
Author: m0_51303687
Title: 2021年第12届蓝桥杯国赛做题记录

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/604189/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球