首页 > 其他分享 >蓝桥杯历年省赛真题做题记录(A组)(2022年第十三届)

蓝桥杯历年省赛真题做题记录(A组)(2022年第十三届)

时间:2023-04-06 23:11:26浏览次数:38  
标签:flag 真题 int 2x mid 蓝桥 step maxn 做题

D题:选数异或

  考虑到异或的一个很好的性质,$A^B=x$等价于$A^x=B$。用$flag$数组记录一下数字$A[i]$是否出现过,出现过则$flag[A[i]]不等于0$。

  类似DP中分配任务模型的思想,这样我们只需要对每次$L,R$询问,判断之中有没有这样一对$(l,r)$数对使得$A[l]^A[r]==x$。因此设$d[i]$为位置$i$之前起始位置$l$最大的数对的起始位置。预处理先遍历一遍$A$数组,$O(n)$处理掉$d$数组。最终整个复杂度是$O(n+m)$。

#include <cstdio>
#define max(a,b) (((a)>(b))?(a):(b)) 
using namespace std;
const int maxn=1e5;

int n,m,x;
int A[maxn+5];
int d[maxn+5];
int flag[(1<<20)];

int main(){
    scanf("%d%d%d",&n,&m,&x);
    for (int i=1;i<=n;i++){
        scanf("%d",&A[i]);
        if (flag[A[i]^x])
            d[i]=max(d[i-1],flag[A[i]^x]);
        else
            d[i]=d[i-1];
        flag[A[i]]=i;
    }
    int L,R;
    while (m--){
        scanf("%d%d",&L,&R);
        if (L<=d[R])
            puts("yes");
        else
            puts("no");
    }
    return 0;
} 

 

E题:青蛙过河

  很容易想到二分,这样只需要解决对于给定的一个步长$step$,如何判断能否用$step$的跳跃能力过河:即$step$的合法性问题。

  想到因为步长最多是$step$,因此对于单次过河,任意的一个$[i,i+step)$的区间,青蛙都至少会跳$1$次(不可能一步跨过这个区间);那么对于$2x$次过河,青蛙对于这个区间都至少会跳$2x$次。因此易证 $step$合法的条件是对于任意的一个$[i,i+step)$的区间,有$2x$个石头。

#include <cstdio>
using namespace std;
const int maxn=1e5;

int n,x;
int sum[maxn+5];

bool check(int step){
    for (int i=step;i<n;i++)
        if (sum[i]-sum[i-step]<x)
            return false;
    return true;
}

int main(){
    scanf("%d%d",&n,&x);
    x*=2;
    for (int i=1,x;i<n;i++){
        scanf("%d",&x);
        sum[i]=sum[i-1]+x;
    }
    int l=0,r=n,mid;
    while (true){
        mid=(l+r)>>1;
        if (check(mid))
            r=mid;
        else
            l=mid;
        if (r-l<=1){
            printf("%d",r);
            return 0; 
        } 
    }
} 

 

 

 

 

 

  

标签:flag,真题,int,2x,mid,蓝桥,step,maxn,做题
From: https://www.cnblogs.com/wegret/p/17294571.html

相关文章

  • P8712 [蓝桥杯 2020 省 B1] 整数拼接
    P8712[蓝桥杯2020省B1]整数拼接https://www.luogu.com.cn/problem/P8712这题想多了一步。。不需要求逆元,因为最多9位数,所以直接\(O(10n)\)记录乘积的模值注意不能用map#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintN=1e5+5;ll......
  • 蓝桥杯——解码
       输入样例:H3el5o2题解:#include<bits/stdc++.h>usingnamespacestd;chars[110];stringres;intnum;intmain(){scanf("%s",s);for(inti=0;i<strlen(s);){if((i+1<strlen(s))&&(s[i+1]>='0�......
  • 蓝桥杯——整除数列
     题解:#include<bits/stdc++.h>usingnamespacestd;intmain(){longlongn;cin>>n;while(n>0){cout<<n<<"";n=n/2;}}......
  • 蓝桥杯——整数拼接
    整数拼接   测试用例:421234题解:#include<bits/stdc++.h>usingnamespacestd;longlonga[100010];longlongf[11][100010];//余数数组,表示a[i]*10^r%k的个数longlongres;intmain(){longlongn,k;cin>>n>>k;for(inti=0;i<......
  • 蓝桥杯——走方格
       题解:#include<bits/stdc++.h>usingnamespacestd;intf[40][40];intn,m;intmain(){cin>>n>>m;f[0][1]=1;for(inti=1;i<=n;i++){for(intj=1;j<=m;j++){if(i%2==0&&j%2==0......
  • 2009年NOIP提高组真题-HanKson的趣味题(GCD&LCM优化)
    2009年NOIP提高组真题-HanKson的趣味题(GCD&LCM优化)本题的编码是用Python实现的,C++的思路也是相同的。希望本文能够帮助到你!题目:暴力法:直接根据题目的要求写:frommathimportgcddeflcm(a,b):returna*b//gcd(a,b)n=int(input())for_inrange(n):cnt=......
  • 王道C语言笔记NOTE-中级阶段Note8-排序算法真题实战
    一、2016年43题1、问题描述2、答案解析(1)、算法的基本设计思想由题意知,将最小的n/2个元素放进A1中,剩余元素放在A2中,分组结果即可满足题目要求。仿照快速排序的思想,基于枢轴把n个整数划分成两个子集,根据划分后枢轴所处的位置i分别处理:①、若i=n/2,则分组完成,算法结束;②、若i<......
  • 4/5总结备战蓝桥杯
    在今天清明节,放假一天,我早上准备了蓝桥杯,下午也学习了蓝桥杯,然后出去吃了一顿饭,回到宿舍已经10点,然后又学习了蓝桥杯。我学习了以下题:刷题:#include<iostream>#include<bits/stdc++.h>usingnamespacestd;intmain(){ longlonga,b,n; cin>>a>>b>>n; intsum=0; ......
  • 蓝桥杯4天冲刺3
     这道题其实并不难,做出来的关键是理解题意答案(来自网络)——#include<iostream>#include<vector>usingnamespacestd;typedeflonglongLL;LLn,ma,mb,ans,temp,key;vector<LL>nums_a;vector<LL>nums_b;intmain(){scanf("%lld%lld",&n,&ma);//......
  • 蓝桥-卡片
    #include<bits/stdc++.h>//包含所有常用的头文件usingnamespacestd;inta[10];//定义一个数组a,存储每个数字出现的次数intmain(){memset(a,0,10);//将数组a的所有元素初始化为0for(longlongi=1;;i++){//从1开始遍历整数strings=to_......