蓝桥·算法双周赛

news2024/12/25 9:11:21


文章目录

  • 三带一
  • 数树数
  • 分组
  • 健身
  • 契合匹配
  • 奇怪的线段

一、三带一

本题思路:本题看了数据范围可以直接暴力解决。

#include <bits/stdc++.h>

int main()
{
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);std::cout.tie(nullptr);

  int T;
  std::cin>>T;

  while(T--){
    std::string pokes;
    std::cin>>pokes;

    bool flag=false;//判断是否找到三张牌相同
    for(int i=0;i<pokes.size();i++){
      int cnt=0;
      for(int j=0;j<pokes.size();j++){
        if(pokes[i]==pokes[j])
          cnt++;
      }

      if(cnt==3){//如果找到的话不需要继续往下找了直接退出即可
        flag=true;
        break;
      }
    }

    if(flag) std::cout<<"Yes"<<std::endl;
    else std::cout<<"No"<<std::endl;
  }
  return 0;
}

二、数树数

本题思路:本题发现位置的编号为x,如果下一步向左边那么此时所处位置为2x-1,否则就是2x。

#include <bits/stdc++.h>

int main()
{
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);std::cout.tie(nullptr);

  int n,q;
  std::cin>>n>>q;

  while(q--){
    std::string s;
    std::cin>>s;

    int res=1;
    for(char c:s)
      if(c=='L') res=res*2-1;
      else res*=2;
    std::cout<<res<<std::endl;
  }
  return 0;
}

三、分组

本题思路:本题可以采用二分的方式由于是需要从最大极差中找出最小的极差,所以我们首先将所有的身高从小到大进行排序处理,然后我们进行二分即可。

#include <bits/stdc++.h>

constexpr int N=1e5+10;

int n,k;
int h[N];

bool check(int mid)
{
  int t=h[1];//当前第一个元素为第一组
  int cnt=1;
  for(int i=2;i<=n;i++)
    if(h[i]-t>mid){//如果与当前组最矮身高的极差超过所给的极差那么需要分到另一个小组中去
      cnt++;
      t=h[i];
    }
  return cnt<=k;
}

int main()
{
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);std::cout.tie(nullptr);

  std::cin>>n>>k;
  for(int i=1;i<=n;i++) std::cin>>h[i];

  //按照身高从小到大排序
  std::sort(h+1,h+n+1);

  //这里我们通过对最大极差进行二分处理
  int l=0,r=h[n]-h[1];
  while(l<r){
    int mid=l+r>>1;
    //如果当前mid满足条件则我们向左继续满足条件的最小极差
    if(check(mid)) r=mid;
    else l=mid+1;
  }
  std::cout<<r<<std::endl;
  return 0;
}

四、健身

本题思路:本题是一道dp问题,首先我们考虑一下如果第i天不训练或者不能训练的话那么此时状态间转移方程是dp[i]=dp[i-1],如果第i天使计划中的某一天则我们需要满足条件需要在[i-2^k+1,i]这个区间中需要都是空闲的,我们可以利用前缀和来判断区间是否空闲问题。

#include <bits/stdc++.h>

typedef long long LL;
constexpr int N=2e5+10;

int n,m,q;
int sum[N];//利用前缀和来求前i天有几天空闲
LL sw[N];//用来表示第2^k天
LL dp[N];

int main()
{
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);std::cout.tie(nullptr);
  
  std::cin>>n>>m>>q;
  for(int i=1;i<=q;i++) {
    int x;
    std::cin>>x;
    sum[x]++;
  }

  //利用前缀和来求出前面空闲的天数
  for(int i=1;i<=n;i++) sum[i]+=sum[i-1];

  while(m--){
    int k;
    LL s;
    std::cin>>k>>s;
    sw[k]=std::max(sw[k],s);
  }

  for(int i=1;i<=n;i++){
    dp[i]=dp[i-1];
    for(int j=0;j<=n;j++){//这里类似于完全背包问题
      int k=i-(1<<j);
      if(k>=0&&sum[i]-sum[k]==0)//如果[i-2^k+1,i]空闲的话,那么此时需要更新
        dp[i]=std::max(dp[i],sw[j]+dp[k]);
      else break;
    }
  }

  std::cout<<dp[n]<<std::endl;
  return 0;
}

五、契合匹配

本题思路:首先先将s串扩大两倍然后进行KMP算法即可。

#include<bits/stdc++.h>

constexpr int N=2e6+10;

int n;
char s[N],p[N];//这里s是长串是用来匹配的那一个人,p为短串也就是匹配的那一个
int next[N];

int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);std::cout.tie(nullptr);
    
    std::cin>>n>>s+1>>p+1;
    
    //将s串大小写先进行转换
    for(int i=1;i<=n;i++){
      if(std::isupper(s[i])) s[i]=std::tolower(s[i]);
      else s[i]=std::toupper(s[i]);
      s[i+n]=s[i];
    }

    //求next数组
    for(int i=2,j=0;i<=n;i++){
        while(j&&p[i]!=p[j+1]) j=next[j];
        if(p[i]==p[j+1]) j++;
        next[i]=j;
    }
    
    //KMP
    int res=N;
    for(int i=1,j=0;i<=n+n;i++){
        while(j&&s[i]!=p[j+1]) j=next[j];
        if(s[i]==p[j+1]) j++;
        if(j==n){
            res=std::min(res,std::min(i - n, n * 2 - i));
            j=next[j];
        }
    }
    
    if(res==N) std::cout<<"No"<<std::endl;
    else std::cout<<"Yes"<<std::endl<<res<<std::endl;
    
    return 0;
}

六、奇怪的线段

本题思路:本题可以使用先求出包含a的所有区间个数减去[a,b]即可得到答案,那么我们可以采用树状数组的方式来找出前缀和。

#include <bits/stdc++.h>

constexpr int N=2e6+10;

int n,q;
int tr[N];
int res[N];
int sum[N];//求前缀区间和

struct Seg//用来表示一个区间
{
  int l,r;
  int id,op;//id表示编号,op表示操作方式
}Segs[N];


bool cmp(const Seg&s1,const Seg&s2)//以右端点进行排序
{
  if(s1.r==s2.r){
    if(s1.l!=s2.l) return s1.l<s2.l;
    return s1.op<s2.op;
  }
  return s1.r>s2.r;
}

int lowbit(int x)
{
  return x&-x;
}

void add(int x,int c)
{
  for(int i=x;i<=N;i+=lowbit(i)) tr[i]+=c;
}

int query(int x)
{
  int res=0;
  for(int i=x;i;i-=lowbit(i)) res+=tr[i];
  return res;
}

int main()
{
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);std::cout.tie(nullptr);

  std::cin>>n>>q;
  for(int i=1;i<=n;i++){
    int l,r;
    std::cin>>l>>r;
    //这里需要注意区间左右端点的大小关系需要判断
    if(l>r) std::swap(l,r);
    //这里是维护[l,r]这个区间都加上1
    sum[l]++,sum[r+1]--;
    Segs[i]={l,r,0,0};
  }

  //求出区间前缀和
  for(int i=1;i<N;i++) sum[i]+=sum[i-1];

  for(int i=1;i<=q;i++){
    int a,b;
    std::cin>>a>>b;
    res[i]=sum[a];
    if(a>b) std::swap(a,b);
    Segs[++n]={a,b,i,1};
  }

  std::sort(Segs+1,Segs+n+1,cmp);
  for(int i=1;i<=n;i++){
    if(Segs[i].op==0) add(Segs[i].l,1);
    else res[Segs[i].id]-=query(Segs[i].l);
  }

  for(int i=1;i<=q;i++) std::cout<<res[i]<<std::endl;

  return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1098138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#网络爬虫实例:使用RestSharp获取Reddit首页的JSON数据并解析

Reddit 是一个非常受欢迎的分享社交新闻聚合网站&#xff0c;用户可以在上面发布和内容。我们的目标是抓取 Reddit 首页的数据 JSON&#xff0c;以便进一步分析和使用。 C#技术概述&#xff1a;C#是一种流行的编程语言&#xff0c;它具有流畅流畅的特点&#xff0c;非常适合开发…

用手势识别来测试视力?试试用百度AI来实现想法

文章目录 ⭐ 前言⭐ 灵感来源⭐ 项目准备⭐ 项目实现⭐ 不足与展望 ⭐ 前言 10月17日&#xff0c;以“生成未来&#xff08;PROMPT THE WORLD&#xff09;”为主题的百度世界2023将在北京首钢园举办。百度创始人、董事长兼首席执行官李彦宏将带来以“手把手教你做AI原生应用”…

【微信小程序开发】基础语法篇

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于小程序的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.视图层 1.数据绑定 wxml js 2 .列…

android CountDownTimer倒计时随时随地开启或关闭

前言 业务上有个需求&#xff0c;在心跳被触发时需要记录一个时间 当心跳断开后120s需要断开连接 如果收到心跳包就重置这个定时器的时间 代码实现 private CountDownTimer mTimer; private boolean mIsTimerRunning false;if (!mIsTimerRunning) {// 启动定时器startTimer…

消息队列学习分享

消息队列学习 消息队列来解决问题 &#xff08;1&#xff09;异步处理 消息通知、日志管理、更新统计数据等步骤 &#xff08;2&#xff09;流量控制 如何避免过多的请求压垮我们的系统&#xff1f; 比如一个秒杀系统&#xff0c;网关在收到请求后&#xff0c;将请求放入…

基于Pytest+Requests+Allure实现接口自动化测试

一、整体结构 框架组成&#xff1a;pytestrequestsallure设计模式&#xff1a; 关键字驱动项目结构&#xff1a; 工具层&#xff1a;api_keyword/参数层&#xff1a;params/用例层&#xff1a;case/数据驱动&#xff1a;data_driver/数据层&#xff1a;data/逻辑层&#xff1a…

数字化时代,数据仓库究竟是干什么的?

无论你是否专门从事大数据开发&#xff0c;作为一个开发人员&#xff0c;应该都听说过数据仓库的概念&#xff0c;那你知道为什么会出现数据仓库&#xff1f;数据仓库究竟是干嘛的吗&#xff1f;有什么价值和意义呢&#xff1f;那么本文就带到入门&#xff0c;揭开数据仓库的面…

嵌入式软硬分工与职业发展

嵌入式软硬分工与职业发展&#xff1a; 嵌入式系统分为软件和硬件两个方向。大公司通常明确员工从事嵌入式软件或硬件工作&#xff0c;分工合理利用经验解决问题。小公司可能综合工作&#xff0c;但长期不利深入学习和发展&#xff0c;对个人竞争力不利。嵌入式软件一般指底层…

财报解读:百事业绩继续超预期,无糖布局将带来新爆发?

7月份以来&#xff0c;美国市场通胀“二次反弹”&#xff0c;叠加新型减肥药在北美市场持续风靡&#xff0c;外界普遍预期食品饮料品类的消费将受到冲击。 然而&#xff0c;在此环境下&#xff0c;行业巨头百事仍然交出了一份全面超预期的三季报&#xff0c;并且还有力回应了新…

node 通过axios发送post请求(FormData)

方案一&#xff1a; const axios require(axios) const FormData require(form-data) const fs require(fs)const sdUpscaleOnAzure async (req, res) > {const data new FormData()data.append(image, fs.readFileSync(/temp/ai/sd/download/1.png))let config {hea…

动态规划:10 0-1背包理论基础II(滚动数组)

动态规划&#xff1a;10 0-1背包理论基础II&#xff08;滚动数组&#xff09; 接下来还是用如下这个例子来进行讲解 背包最大重量为4。 物品为&#xff1a; 重量价值物品0115物品1320物品2430 问背包能背的物品最大价值是多少&#xff1f; 一维dp数组&#xff08;滚动数组…

redis作为消息队列的缺点

Redis作为消息队列的不足。 1、基于内存 Redis是一种基于内存的数据库产品&#xff0c;这意味着数据存储在内存中&#xff0c;当内存不足时&#xff0c;Redis会使用基于磁盘的虚拟内存来存储数据。虽然这种虚拟内存机制可以增加Redis的存储容量&#xff0c;但也会降低Redis的…

19.项目开发之量化交易QuantTrade(一)

项目开发之量化交易QuantTrade 数据库创建&项目创建 SpringBoot项目之量化交易QuantTrade创建 创建项目之初&#xff0c;将需要的pom一次性导入 <properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.…

福建建筑模板厂家-能强优品木业

福建建筑模板厂家-能强优品木业&#xff0c;是一家专业从事建筑模板生产销售25年的源头工厂。我们以优质的产品和卓越的服务赢得了福建当地建筑施工企业的信赖与合作。作为一家有着丰富经验的建筑模板厂家&#xff0c;我们致力于提供高品质的产品&#xff0c;以满足客户的需求。…

一文2000字手把手教你写一份优质的性能测试报告的编写

性能测试项目实战&#xff08;风暴平台&#xff09; 1、背景 公司之前的测试团队做API的⾃动化测试都是使⽤JMeter等工具来进行&#xff0c;这样的话测试效率⽽⾔不是那么很⾼&#xff0c;⽽ 且在扩展性⽅⾯不是很有竞争⼒的。所以开发了新的测试平台&#xff0c;但是考虑到公…

只要看完这6个案例,就会刷新你对室内空间颜色搭配的认知

只要看完这6个案例&#xff0c;就会刷新你对室内空间颜色搭配的认知&#xff01; 室内设计和家居装饰灵感因 "芭比娃娃 "电影的上映而席卷了 A&D 行业。随着多年来粉红色的复苏&#xff0c;专家们采用大胆的粉红色调和女性化的装饰也就不足为奇了&#xff0c;而这…

不同阶段uncertainty如何设置

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; PreCTS stage: Setup uncertainty jitter skew margin Hold uncertainty skew margin PostCTS stage: Setup uncertainty jitter margin Hold uncertainty margin jitter指的是pll时钟抖动…

每个开发人员都想使用的编程语言

在任何时候&#xff0c;一些编程语言都会把大量的开发人员变成热情的布道者&#xff0c;试图说服世界其他地方的人相信它的伟大。 当热起来的时候&#xff0c;这种语言可能会成为行业标准&#xff0c;但其他时候&#xff0c;这种受欢迎程度就会消失。 在这个故事中&#xff0…

【重要!合规政策更新】欧盟,儿童玩具相关产品卖家请及时关注!儿童玩具EN71

合规政策更新&#xff01; 尊敬的卖家&#xff1a; 您好&#xff01; 我们此次联系您是因为您正在销售需要审批流程的商品。为此&#xff0c;亚马逊正在实施审批流程&#xff0c;以确认我们网站上提供的商品类型须符合指定的认证标准。要在亚马逊商城销售这些商品&#xff0…

华为OD七日集训第8期 - 按算法分类,由易到难,循序渐进,玩转OD

目录 一、适合人群二、本期训练时间三、如何参加四、7日集训第8期五、精心挑选21道高频100分经典题目&#xff0c;作为入门。第1天、数据结构第2天、滑动窗口第3天、贪心算法第4天、二分查找第5天、分治递归第6天、深度优先搜索dfs算法第7天、宽度优选算法&#xff0c;回溯法 六…