暑期算法训练

news2024/9/21 19:03:54

目录

A.糖果(Candy)

B.小红的数组重排 

C.牛牛与LCM

D.子串

E.勤奋的杨老师 

F.清楚姐姐跳格子 

G.方块 I 

H.PUBG 


A.糖果(Candy)

思路 :贪心,为了使操作数最少,我们要尽可能的先吃第二个盒子里的糖果,如果还不满足条件就再吃第一个盒子里的糖果。

C++代码:

void solve()
{
 int n,x;cin>>n>>x;
 vector<int> v(n);
 for(auto &t:v) cin>>t;
 int sum=0;
 for(int i=0;i+1<n;i++)
 {
   if(v[i]+v[i+1]>x)
   {
       int a=v[i]+v[i+1];
       int cha=a-x;
     if(v[i+1]>=cha)
     {
         v[i+1]-=cha;
         sum+=cha;
     }
     else
     {
         sum+=cha;
         v[i]-=cha-v[i+1];
         v[i+1]=0;
         
     }
   }
 }
 cout<<sum;
}

B.小红的数组重排 

思路:贪心+排序,首先判断是否存在三个相同的数,因为三个相同的数会产生这种情况a[i]*a[i+1]=a[i+1]*a[i+2],若存在,则输出NO,反之从小到大排序,若存在两个0,则NO,反之则输出相应序列

C++代码:

const int N=5e5+5;
int a[N],sum[N];
map<int,int> h;

void solve()
{  
  int n,f=0;cin>>n;
  for(int i=0;i<n;i++) 
  {
    cin>>a[i];
    if(h[a[i]]>=2) f=1;
    h[a[i]]++;
  }
  if(f) cout<<"NO";
  else
  {
    sort(a,a+n);
      if(a[0]==0&&a[1]==0) 
      {
         cout<<"NO";
         return ;
      }
    cout<<"YES"<<endl;
    for(int i=0;i<n;i++) cout<<a[i]<<' ';
  }
}

C.牛牛与LCM

思路 :将所有能整除x的数取一个最小公倍数,如果最终结果能被x整除则能够选出若干个数的最小公倍数为x,否则不能

C++代码:

int gcd(int a, int b){ return b?gcd(b, a%b):a;}

void solve()
{
  int n;cin>>n;
  vector<int> v(n);
  for(auto &t:v) cin>>t;
  int x,f=0;cin>>x;
    int res=1;
  for(int i=0;i<n;i++)
  {
    if(x%v[i]==0) res=v[i]*res/gcd(v[i],res);
  }
  if(res%x==0) cout<<"Possible";
  else cout<<"Impossible";
 
}

D.子串

思路:暴力枚举,先枚举每一种进制,再将1~n转换位k进制,用字符串表示

C++代码:

string op="0123456789ABCDEF";

string jz(int n,int k)
{
    string s="";
    while(n)
    {
       s+=op[n%k];
       n/=k;
    }
    reverse(s.begin(),s.end());
    return s;
}
void solve()
{
  int n,f=0;cin>>n;
  string p;cin>>p;
  for(int k=2;k<=16;k++)
  {
    string s="";
    for(int i=1;i<=n;i++)
    {
        s+=jz(i,k);
    }
    if(s.find(p)!=-1)
    {
        f=1;
        break;
    }
  }
  if(f) cout<<"yes";
  else cout<<"no";
}

E.勤奋的杨老师 

 

思路: 最长上身子序列的长度+最长下降子序列的长度,用朴素做法O(n*n)显然会超时,这里我们需要用到二分来优化,时间复杂度为O(n*logn)

C++代码:

const int N=5e5+5;
int up[N],down[N],n,a[N],r[N],l[N];
void solve()
{
  cin>>n;
  for(int i=0;i<n;i++) cin>>a[i];
    int len=0;
  for(int i=0;i<n;i++)
  {
    if(up[len]<=a[i])
    {
        up[++len]=a[i];
        l[i]=len;
    }
    else
    {
        int pos=upper_bound(up+1,up+len+1,a[i])-up;
        up[pos]=a[i];
        l[i]=pos;
    }
  }

  len=0;
  for(int i=n-1;i>=0;i--)
  {
    if(down[len]<=a[i])
    {
        down[++len]=a[i];
        r[i]=len;
    }
    else
    {
        int pos=upper_bound(down+1,down+len+1,a[i])-down;
        down[pos]=a[i];
        r[i]=pos;
    }
  }

  int maxd=0;
  for(int i=0;i<n;i++)
    maxd=max(maxd,l[i]+r[i]-1);
cout<<maxd;
 
}

F.清楚姐姐跳格子 

思路:bfs,先用vector存一下每个点所有的因数,同时因数不大于n(枚举到因数<=n防止超时),然后就是板子了。

const int N=1010;
int dist[N],a[N];
bool st[N];
vector<int> e[N];

void solve()
{
  int n;cin>>n;
  for(int i=1;i<=n;i++)
  {
    cin>>a[i];
    dist[i]=1e18;
    for(int j=1;j<=a[i]/j&&j<=n;j++)
    {
        if(a[i]%j==0)
        {

            e[i].eb(j);
            if(a[i]/j!=j)
            {
                if(a[i]/j<=n) e[i].eb(a[i]/j);
            }
        }
    }
  }

  queue<int> q;
  q.push(1);
  dist[1]=0; st[1]=true;
  while(q.size())
  {
    auto t=q.front(); q.pop();
    st[t]=true;
    for(auto v:e[t])
    {
        if(!st[t+v]&&t+v<=n&&dist[t+v]>dist[t]+1)
        {
            dist[t+v]=dist[t]+1;
            q.push(t+v);
        }
        if(t-v>=1&&!st[t-v]&&dist[t-v]>dist[t]+1)
        {
            dist[t-v]=dist[t]+1;
            q.push(t-v);
        }
    }
  }
  cout<<dist[n];
}

G.方块 I 

 思路:找规律,多模拟几个样例。

const int N=1010;
int a[4];
void solve()
{
    
  string s;
    while(cin>>s)
    {
  int sum=0,ans=0;
        a[1]=a[2]=a[3]=0;
  for(int i=0;i<s.size();i++)
  {
    if(s[i]=='a')
    {
        a[1]++;
        ans^=1;
        sum++;
    }
    else if(s[i]=='b')
    {
        a[2]++;
        ans^=2;
        sum++;
    }
    else
    {
        a[3]++;
        ans^=3;
        sum++;
    }
  }

  if(sum==a[1]||sum==a[2]||sum==a[3]) cout<<s.size();
  else
  {
    if(ans==0) cout<<2;
    else cout<<1;
  }
        cout<<endl;
    }
}

H.PUBG 

思路:bfs板子题。

C++代码:

int ne[4][2]={{1,0},{0,1},{-1,0},{0,-1}};

const int N=1010;
int a[N][N],n,dist[N][N];
int sx,sy,ex,ey,ans;
bool st[N][N];

void solve()
{
   while(cin>>n)
   {
    ans=0x3f3f3f3f;
   for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    {
        cin>>a[i][j];
        if(a[i][j]==-1)
        {
            a[i][j]=0;
            sx=i,sy=j;
        }
        if(a[i][j]==-2)
        {
            a[i][j]=0;
            ex=i,ey=j;
        }
    }
   queue<PII> q;
    q.push({sx,sy});
    mem(dist,0x3f);
    dist[sx][sy]=0;

    while(q.size())
    {
        auto t=q.front();q.pop();
        int x=t.fi,y=t.se;
        for(int i=0;i<4;i++)
        {
            int tx=x+ne[i][0],ty=y+ne[i][1];
            if(tx>=1&&tx<=n&&ty>=1&&ty<=n)
            {
              if(dist[tx][ty]>dist[x][y]+a[tx][ty])
              {
                  dist[tx][ty]=dist[x][y]+a[tx][ty];
                  q.push({tx,ty});
              }
            }
        }
    }
    cout<<dist[ex][ey]<<endl;
   }
}

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

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

相关文章

MySQL 中间件 MySQL-Router

目录 1 MySQL-Router 的介绍 2 MySQL-Router 负载均衡 2.1 设计目的&#xff1a; 2.2 HAProxy 与 Nginx 和 MySQL-Router 之间的区别 2.3 MySQL-Router 的优势 3 MySQL-Router 的获取 3 MySQL-Router 的使用 3.1 实验环境 3.2 MySQL-Router 部署 3.3 MySQL-Router 配置 3.4 测…

java后端请求与响应总结

get 请求&#xff1a;将参数写在请求路径中&#xff08;请求路径跟一个&#xff1f;后面跟参数多个参数之间用&连接&#xff09; post 请求&#xff1a;将参数写在请求体中中 一、请求 1.简单参数 如 传一个或两个字符串、整数等 例如串一个用户名和密码 如果传入的数…

完成课题ssrf实现.SSH未创建写shell,同时完成其他漏洞复现

一、SSRF (Server-Side Request Forgery) 是一种网络安全漏洞&#xff0c;发生在服务器端应用程序中&#xff0c;允许攻击者通过服务器向任意网络资源发送请求&#xff0c;而无需用户直接参与。这种漏洞通常源于程序设计错误&#xff0c;例如当应用程序使用用户的输入作为URL请…

C++入门基础知识31

成长路上不孤单&#x1f60a;【14后男生&#xff0c;C爱好者&#xff0c;持续分享所学&#xff0c;如有需要欢迎收藏转发&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#xff01;&#xff01;&#xff01;&#xff01;&…

论文辅助笔记:Large Language Models are Zero-Shot Next LocationPredictors

论文理论部分&#xff1a;论文笔记&#xff1a;lunLarge Language Models are Zero-Shot Next LocationPredictors-CSDN博客 2 Data 2.1 Dataset类 2.2 下载文件 2.3 get_dataset 2.4 get_trajectories trajectory_split暂时略去 # save the test dictionary and the true l…

【Qt】常用控件QCalendarWidget

常用控件QCalendarWidget的使用 QCalendarWidget表示一个日历 核心属性 属性说明 selectDate 当前选中的⽇期 minimumDate 最⼩⽇期 maximumDate 最⼤⽇期 firstDayOfWeek 每周的第⼀天(也就是⽇历的第⼀列) 是周⼏. gridVisible 是否显⽰表格的边框 selectionMode…

Python酷库之旅-第三方库Pandas(097)

目录 一、用法精讲 416、pandas.DataFrame.memory_usage方法 416-1、语法 416-2、参数 416-3、功能 416-4、返回值 416-5、说明 416-6、用法 416-6-1、数据准备 416-6-2、代码示例 416-6-3、结果输出 417、pandas.DataFrame.empty属性 417-1、语法 417-2、参数 …

AI大模型日报#0825:10行代码让大模型数学提升20%、文心日均调用超6亿

导读&#xff1a;AI大模型日报&#xff0c;爬虫LLM自动生成&#xff0c;一文览尽每日AI大模型要点资讯&#xff01;目前采用“文心一言”&#xff08;ERNIE-4.0-8K-latest&#xff09;、“智谱AI”&#xff08;glm-4-0520&#xff09;生成了今日要点以及每条资讯的摘要。欢迎阅…

Reinforcement-Learning 1.fundamental concept

1.首先用一个网格世界来理解 机器人在网格世界行走有四种形式&#xff0c;Accessible/forbidden/target cells, boundary. 提出一个任务&#xff0c;找到一个good的方式去到target 什么是good&#xff0c;不碰到boundary不进入forbidden最短的道路进入target 2.state State…

UE基础 —— 打包项目

目录 设置游戏的默认地图 创建打包文件 发布 签名和加密 内容烘焙 优化加载时间 使用事件驱动加载器&#xff08;Event Driven Loader&#xff0c;EDL&#xff09;和异步加载线程&#xff08;Asynchronous Loading Thread&#xff0c;ALT&#xff09; 压缩.pak文件 对…

PG数据库导致断电/重启无法正常启动

一、问题 数据库断电后&#xff0c;启动PG数据库后无法正常启动&#xff0c;报”psql: could not connect to server: No such file or directory”的错误&#xff0c;错误图片如下&#xff1a; 二、背景分析 数据库是单机版&#xff0c;使用k8s进行部署运行在指定节点&#…

华为OD机试-找座位(C++ Java Python)

题目描述: 在一个大型体育场内举办了一场大型活动&#xff0c;由于疫情防控的需要&#xff0c;要求每位观众的必须间隔至少一个空位才允许落座。现在给出一排观众座位 分布图&#xff0c;座位中存在已落座的观众&#xff0c;请计算出&#xff0c;在不移动现有观众座位的情况下&…

正则表达式匹配——力扣困难题解

力扣链接&#xff1a;正则表达式匹配 题目描述&#xff1a; 给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符 ‘*’ 匹配零个或多个前面的那一个元素 所谓匹配&#xff0c;是要涵盖 整个 字符串 …

GUI界面开发之tkinter(三) 按钮类组件和选择列表类组件

大家好&#xff01;我是码银儿~&#xff0c;欢迎关注&#x1f970;&#xff1a; CSDN&#xff1a;码银公众号&#xff1a;码银学编程 一、按钮类组件 按钮类组件顾名思义就是按钮&#xff0c;跟平时大家看见的按钮没啥区别&#xff0c;允许用户通过点击执行操作。以下是三种…

Awesome-LLMs-for-Video-Understanding - 基于大型语言模型的视频理解研究

Awesome-LLMs-for-Video-Understanding 是 基于大型语言模型的视频理解研究 github : https://github.com/yunlong10/Awesome-LLMs-for-Video-Understandingpaper&#xff1a;Video Understanding with Large Language Models: A Survey https://arxiv.org/pdf/2312.17432 视频…

五、前后端分离通用权限系统(5)

&#x1f33b;&#x1f33b; 目录 一、前端框架1.1、vue-element-admin1.1.1、Vue 概述1.1.2、Element-ui 概述1.1.3、ES6 概述 1.2、vue-admin-template1.2.1、简介1.2.2、下载1.2.3、安装1.2.4、源码目录结构&#xff08;了解&#xff09;1.2.5、改造登录&退出功能1.2.5.…

跨域解决 | 面试常问问题

跨域解决 | 面试常问问题 跨域问题一直是前端开发中不可避免的一部分&#xff0c;它涉及到浏览器的同源策略和安全机制。本文将深入解析跨域问题的本质&#xff0c;并探讨前端和后端的多种解决方案&#xff0c;同时分享一些扩展与高级技巧。最后&#xff0c;我们还将总结跨域解…

K8S系列——(二)、K8S部署RocketMQ集群

1、环境准备 要将RocketMQ部署到K8S上&#xff0c;首先你需要提前准备一个K8S集群环境&#xff0c;如图我已经准备好了一个版本为 v1.28.13 的 K8S 集群&#xff08;其他版本也没问题&#xff09;&#xff1a; 角色IPMaster192.168.6.220Node-1192.168.6.221Node-2192.168.6.…

浏览器不开梯子无法上网,检查代理或防火墙或者找不到服务器ip地址

1、代理没有关闭 检查代理是否关闭 检查方法1&#xff1a; 在控制面版中找到Internet选项&#xff0c;点击连接栏&#xff0c;在连接栏中选择局域网设置。之后将代理服务器下面的框选中的对勾取消。最终如下 检查方法2&#xff1a; 打开设置&#xff0c;找到网络和internet…

书生浦语大模型实战营:LMDeploy量化部署

1.任务&#xff1a; 使用结合W4A16量化与kv cache量化的internlm2_5-1_8b-chat模型封装本地API并与大模型进行一次对话。 2.背景&#xff1a; 1.计算模型需要的权重大小&#xff1a; 1B代表10个亿参数&#xff0c;假如是16位浮点数&#xff08;f16&#xff09;&#xff0c;也…