周总结(第一周)

news2024/11/17 0:06:50

3月份3个星期

*** 三个星代表不会
** 再做 * 加强

题目1-完全二叉树(记忆)

考察数据结构
完全二叉树的深度dep=log2(N+1)+1
完全二叉树节点的深度depi=ceil(log2(i+1))向上舍入

完全二叉树的层次遍历,遍历每层的二叉树计算基础每层的总和,然后找出最大的和。用到log2()函数,计算以2为底的对数,还有ceil()向上取整函数,头文件是cmath.
完全二叉树的深度h与节点数N的关系为h=log2(N+1).

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
   int n,x,d;
   long long int num=0;
   cin>>n;
   long long arr[10005] = { 0 };//初始化数组
   int dep = log2(n + 1);//二叉树的深度
   for(int i=1;i<=n;i++){
        cin>>x;//直接将数据输入进去就可以
    int id = ceil(log2(i + 1));//计算当前的数据所在的深度
    arr[id]+=x;//把对应深度的数相加
   }
   for(int i=1;i<=dep+1;i++){
    if(num<arr[i]){//比较得出最大值得的最小深度
        num=arr[i];
        d=i;
    }
   }
   cout<<d<<endl;
    return 0;
}

注意:直接输入数据就ok,将各深度相同的二叉树的权值进行相加;深度用数组的下标表示即可。

再做一遍:

#include <iostream>
#include <cmath>
using namespace std;
int a[10004];
int main()
{
    int N,x;
    cin>>N;

    int dep = log2(N + 1);
    for(int i=1;i<=N;i++)
    {
        cin>>x;
        int id = ceil(log2(i + 1));
        a[id]+=x;
    }
    int maxn=-1;
    int d=0;
    for(int i=1;i<=dep;i++)//错误代码
    {
        if(maxn<a[i]) {
                maxn=a[i];
                d=i;
        }

    }
    cout<<d<<endl;
    return 0;
}

在这里插入图片描述
完全二叉树总共的深度dep=log2(N+1)+1
完全二叉树的结点的深度dep=ceil(log2(i+1))向上舍入最近的数

修改:

  for(int i=1;i<=dep+1;i++)
   {
        if(maxn<a[i]) {
                maxn=a[i];
                d=i;
        }

    }

题目2-后缀表达式 **

有点不熟悉,不清楚还有会有括号的出现
利用队列

这个题“()”的存在是没有想到的。

错误代码;
应该考虑几种情况;

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
  int n,m;
  cin>>n>>m;
  long long int a[n+m+10];
  for(int i=1;i<=n+m+1;i++){
    cin>>a[i];
  }
  sort(a+1,a+1+n);
  long long int sum=0;
  for(int i=1;i<=m;i++){
    sum-=a[i];
  }
  for(int i=m+n+1;i>=m+1;i--){
    sum+=a[i];
  }
  cout<<sum<<endl;
  return 0;
}
#include <bits/stdc++.h>
/*
1.不含负数
  单数减号1-(1-1-1)=1-1+1+1 相当于减掉一个最小的
  双数减号1+1-(1-1)
  总结减号数>=1都可以转换成减去最小的数
2.含有负数(例如:1-[-1+(-1)]-(-1))
  (假设:负数f个,加号p个,减号m个,数n个,n=p+m+1)(f>0,m>=1,n-m>=1,f<=n)
  1个减号可以把p+1即n-m个负数转成正数,剩余的负数f-(n-m)个负数,此时减号还有m-1个(用到了一个)
  剩余的每个负数都由一个减号去转换。先不考虑(f-(n-m)大小,即先不考虑剩余负数的个数)

  a.当f-(n-m)<m-1,剩余负数小于减号数,会存在负数
    如果f-(n-m)<0,没有剩余负数,m=1上面不等式才成立
    如果f-(n-m)>0,因为m>=1,所以f-(n-m)<m-1不成立,说明不会剩余负数。
    这种情况没有负数,输出所有数的绝对值之和即可
  b.当f-(n-m)>m-1,f>n-1,即f>=n,即f==n,再由上述剩余的负数为m个,此时减号为m-1个,
    此时没有了减号,还有一个负数
     (绝对值总和减到取绝对值最小啊的那个负数的两倍)
  c.当f-(n-m)=m-1,此时没有负数也没有负号了,输出所有的数的绝对值之和

  根据a,b,c得
     当f==n(所有数全为负数)时,绝对值总和减到取绝对值最凶啊的那个负数的两倍
     当f!=n时,输出所有数的绝对值之和
*/
using namespace std;
int p,n,m;
long long sum=0,rsum=0;//sum是绝对值和,rsum是真实值和
int fu=0,min;
long long num[200001],fnum[200001];
int main()
{
  // 请在此输入您的代码
  cin>>p>>m;
  n=p+m+1;
  for(int i=0;i<n;i++)
  {
    cin>>num[i];
    if(num[i]<0){
      fnum[fu]=num[i];
      fu++;//记录负数的个数
      sum-=num[i];//计算绝对值之和
    }else
      sum+=num[i];
    rsum+=num[i];//计算真实值之和
  }
  if(m==0){//所有都是加号
    cout<<rsum;
  }else{//存在减号
    sort(num,num+n);
    if(fu==0){
      cout<<sum-2*num[0];
    }else{
      if(fu!=n){//存在负数存在减号
        cout<<sum;
      }else{//全为负数
        sort(fnum,fnum+fu);
        cout<<sum-(-2*fnum[fu-1]);
      }
    }
  }
  return 0;
}

题目3-迷宫 *

考察深搜广搜的典型题目
利用队列,出对入队

#include <bits/stdc++.h>
using namespace std;
int n,m;
string Map[500];
const int d[4][2]={{1,0},{0,-1},{0,1},{-1,0}};
const string dd="DLRU";//按照字典序增序
struct node {
    int i,j;
    string ans;//到达该节点需要的路径
};
queue<node> q;
void BFS()
{
    node s;
    s.i=0,s.j=0;s.ans="";
    Map[0][0]='1';
    q.push(s);//将第一个节点放入
    while(!q.empty())
    {
        node a=q.front(),b;//队列非空,取出队首
        int x=a.i;
        int y=a.j;
        q.pop();//弹出队首
        if(x==n-1&&y==m-1)//如果是最后一个就输出结果
        {
            cout<<a.ans.length()<<endl;
            cout<<a.ans<<endl;
            break;
        }
        for(int i=0;i<4;i++){//取出队首后,遍历队首四个方向
            int newx=x+d[i][0];
            int newy=y+d[i][1];
            if(newx<0||newy<0||newx>=n||newy>=m) continue;//越界.pass
            if(Map[newx][newy]=='1') continue;//走过,pass
            b.ans=a.ans+dd[i];//赋值,将该节点放入队列
            b.i=newx,b.j=newy;//赋值
            Map[newx][newy]='1';//赋值
            q.push(b);//放入队列
        }
    }
}
int main()
{
   /* cin>>n>>m;
    for(int i=0;i<n;i++){
        cin>>Map[i];
    }
    BFS();*/
    cout<<"DDDDRRURRRRRRDRRRRDDDLDDRDDDDDDDDDDDDRDDRRRURRUURRDDDDRDRRRRRRDRRURRDDDRRRRUURUUUUUUULULLUUUURRRRUULLLUUUULLUUULUURRURRURURRRDDRRRRRDDRRDDLLLDDRRDDRDDLDDDLLDDLLLDLDDDLDDRRRRRRRRRDDDDDDRR"<<endl;
    return 0;
}

题目4-灵能传输 ***

题目-灵能传输

B站视频

#include <bits/stdc++.h>

using namespace std;
/*
ai-1 ,ai, ai+1 ---> ai-1+ai,-ai,ai+1+ai
si-1 ,si, si+1 ---> si, si-1,si
s0,s1,s2,s3,,,,,sn

*/
typedef long long ll;
const int N=300010;

int n;
ll s[N],a[N];
bool st[N];
int main()
{
    int T;
    cin>>T;
    while(T--){
    memset(s,0,sizeof(s));
    memset(a,0,sizeof(a));
     memset(st,0,sizeof(st));
    cin>>n;
    s[0]=0;
    for(int i=1;i<=n;i++){
        cin>>s[i];
        s[i]+=s[i-1];
    }
    ll s0=s[0],sn=s[n];
    if(s0>sn)swap(s0,sn);//?
    sort(s,s+1+n);
    for(int i=0;i<=n;i++){
        if(s[i]==s0)
        {
            s0=i;
            break;
        }
    }
    for(int i=0;i<=n;i++){
        if(s[i]==sn)
        {
            sn=i;
            break;
        }
    }
    //隔一个

    int l=0;
    int r=n;
    for(int i=s0;i>=0;i-=2)
    {
        a[l++]=s[i];
        st[i]=true;
    }
    for(int i=sn;i<=n;i+=2)
    {
        a[r--]=s[i];
        st[i]=true;
    }
    for(int i=0;i<=n;i++)
    {
        if(!st[i])
        {
            a[l++]=s[i];
            st[i]=true;
        }
    }
    ll res=0;
    for(int i=1;i<=n;i++){
        res=max(res,abs(a[i]-a[i-1]));
    }
    cout<<res<<endl;
    }
    return 0;
}

题目5-外卖店优先级 **

内存空间大小的问题,是否使用结构体

#include <iostream>
#include <cstring>
using namespace std;
const int N=10010;
int a[N][N];
//(10000 0000+20000 )*4(int)=4 0004 0000
//256M题目要求的空间,即2^8*z^20=256*1048567=2 6843 3152
int main()
{
    int n,m,t;
    cin>>n>>m>>t;
    int ts,id;
    memset(a,0,sizeof(a));
    for(int i=1;i<=m;i++)
    {
        cin>>ts>>id;
        a[ts][id]+=2;
    }
    int sum[n+1]={0};
    int b[n+1]={0};
    for(int i=1;i<=t;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(a[i][j]==0&&sum[j]!=0)
            {
                sum[j]-=1;
                if(sum[j]<=3) b[j]=0;
            }
            sum[j]+=a[i][j];
            if(sum[j]>5) b[j]=1;
        }
    }
    int ans=0;
    for(int j=1;j<=n;j++)
    {
        //cout<<sum[j]<<" ";
        if(sum[j]>5||(sum[j]>3&&b[j]==1)) ans++;
    }
    cout<<ans<<endl;
    return 0;
}

在这里插入图片描述
利用结构体

#include <iostream>
#include <algorithm>
using namespace std;
const int N=100005;
struct node
{
    int ts,id;
}a[N];
int ans=0;
int sum[N];//当前优先
int last[N];//这家店的上一次订单的时刻
bool hz[N];
bool cmp(node x,node y)
{
   if(x.ts==y.ts) return x.id<y.id;
   return x.ts<y.ts;
}
int main()
{
    int n,m,t;
    cin>>n>>m>>t;
    int sk,bh;
    for(int i=1;i<=m;i++)
    {
        cin>>a[i].ts>>a[i].id;
    }
    sort(a+1,a+m+1,cmp);
    //求优先度
    sk=0;
//    for(int i=1;i<=m;i++)
//       cout<<a[i].ts<<" "<<[i].id;
    for(int i=1;i<=m;i++)
    {
        //当前时刻有订单的信息
        sk=a[i].ts;
        bh=a[i].id;
        if(sk!=last[bh]){//当前时刻与上一个时刻
            sum[bh]=sum[bh]-(sk-last[bh]-1);//当前优先度
        }
        if(sum[bh]<0) sum[bh]=0;
        if(sum[bh]<=3) hz[bh]=0;
        sum[bh]+=2;
        if(sum[bh]>5) hz[bh]=1;
        last[bh]=sk;
    }
    for(int i=1;i<=n;i++){
        if(last[i]<t){
            sum[i]-=t-last[i];
        }
        if(sum[i]<=3){
            hz[i]=0;
        }
    }
      for(int i=1;i<=n;i++){
        if(hz[i]) ans++;
      }
      cout<<ans<<endl;
    return 0;
}

题目6-修改数组

该题注意循环中的时间优化,还可以使用并查集

没有使用并查集
循环没有优化超时了

做法0.5:

#include <iostream>

using namespace std;
const int N=1000010;
long long int a[N];
//256*2^20=268,435,456
//long long int 占8字节内存 ,没有超内存
int main()
{
    int n,x;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>x;
            while(a[x]!=0)
         {
            x++;
         }
        cout<<x<<" ";
        a[x]=1;
    }
    cout<<endl;
    return 0;
}

在这里插入图片描述

做法1:

将循环进行优化

#include <iostream>

using namespace std;
const int N=1000010;
long long int a[N];
//256*2^20=268,435,456
//long long int 占8字节内存 ,没有超内存
int main()
{
    int n,x;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>x;
            while(a[x]!=0)
         {
           a[x]++;
           x+=(a[x]-1);
         }
        cout<<x<<" ";
        a[x]++;
    }
    cout<<endl;
    return 0;
}

在这里插入图片描述

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

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

相关文章

Talk预告 | 新加坡国立大学郑奘巍 AAAI‘23 杰出论文:大批量学习算法加速推荐系统训练

本期为TechBeat人工智能社区第486期线上Talk&#xff01; 北京时间3月30日(周四)20:00&#xff0c;新加坡国立大学二年级博士生——郑奘巍的Talk将准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “大批量学习算法加速推荐系统训练”&#xff0c;届时将分…

Kubernetes 多集群网络方案系列 2 -- Submariner 监控

Submariner 是一个用于连接 Kubernetes 集群的跨集群网络解决方案&#xff0c;可以实现集群之间的服务发现、网络通信等功能。 Prometheus 是一个开源的监控和告警系统&#xff0c;专门用于收集、存储和查询各种应用、系统和基础设施的实时指标数据。Prometheus 具备多维数据模…

Java开发 - MySQL主从复制初体验

前言 前面已经学到了很多知识&#xff0c;大部分也都是偏向于应用方面&#xff0c;在应用实战这条路上&#xff0c;博主一直觉得只有实战才是学习中最快的方式。今天带来主从复制给大家&#xff0c;在刚刚开始动手写的时候&#xff0c;才想到似乎忽略了一些重要的东西&#xf…

面试篇-揭开Spring Bean加载的神秘面纱

SpringBean加载完整过程 启动spring容器&#xff08;创建beanfactory&#xff09;->加载配置(注解、xml)->实例化bean(执行构造方法)->注入依赖->初始化bean&#xff08;设置属性值&#xff09;->使用->销毁 解析和读取 XML 配置文件或注解配置类&#xff0…

Linux嵌入式学习之Ubuntu入门(五)汇编语法学习

系列文章目录 一、Linux嵌入式学习之Ubuntu入门&#xff08;一&#xff09;基本命令、软件安装及文件结构 二、Linux嵌入式学习之Ubuntu入门&#xff08;二&#xff09;磁盘文件介绍及分区、格式化等 三、Linux嵌入式学习之Ubuntu入门&#xff08;三&#xff09;用户、用户组…

synchronized原理、偏向锁、轻量级锁、重量级锁、锁升级

文章目录Synchronized概念自增自减字节码指令临界区竞态条件基本使用原理查看synchronized的字节码指令序列Monitor对象的内存布局Mark Word是如何记录锁状态的偏向锁什么是偏向锁偏向锁延迟偏向偏向锁状态跟踪偏向锁撤销之调用对象HashCode偏向锁撤销之调用wait/notify轻量级锁…

Qt Quick - Drawer

Qt Quick - Drawer使用总结一、概述二、使用1、基础使用2、特点空间运行3、与内容转换相互挤占一、概述 Drawer提供了一个基于滑动的侧边面板&#xff0c;类似于经常在触控界面中使用的侧边面板&#xff0c;为导航提供了一个位置。 二、使用 1、基础使用 抽屉可以放置在内…

springcloud深度探索

中文官方文档&#xff1a;project - Spring Cloud Config - 《Spring Cloud中文文档》 - 书栈网 BookStackSpring Cloud ConfigFeaturesQuick StartSample Projects Spring Cloud为开发人员提供了工具&#xff0c;用以快速的在分布式系统中建立一些通用方案&#xff08;例如配…

CDP思科发现协议解析及C/C++代码实现

通常&#xff0c;大多数网络都有几个路由器或交换机&#xff0c;为了便于网络管理&#xff0c;使用网络图或网络图来告诉网络中存在什么类型的设备&#xff0c;以及所有设备如何相互连接&#xff0c;使用的IP地址以及它们属于哪个VLAN的信息。 CDP是一种专有的第二层思科网络协…

Table Transformer做表格检测和识别实践

计算机视觉方面的三大顶级会议&#xff1a;ICCV,CVPR,ECCV.统称ICE CVPR 2022文档图像分析与识别相关论文26篇汇集简介 论文&#xff1a; PubTables-1M: Towards comprehensive table extraction from unstructured documents是发表于CVPR上的一篇论文 作者发布了两个模型&…

22级ACM 4.16 周赛 题解

这场能题解写的感觉没多少其实&#xff08;真的不是因为懒&#xff09;&#xff0c;既然有人想要题解&#xff0c;那么就随便写一下吧&#xff0c;其实大部分的题都有人写出来&#xff0c;感觉这场真的不需要。 A 题 题解 Count Interval AtCoder - abc233_d_霾まる的博客-CS…

AI绘画王炸功能Control Net安装教程

原文&#xff1a;AI绘画王炸功能Control Net安装教程 - 知乎 AI绘画&#xff0c;最近两大王炸功能出圈了。 一个就是超真实超细节的美女图片&#xff0c;已经快和照片无异了&#xff0c;甚至有人用AI绘画的“女仆照片”开始招募游艇会了&#xff0c;具体教程可以查看Lora这篇…

一键生成元宇宙 AI又杀疯了

人类十几年的进步水平&#xff0c;AI用几个月就能轻易实现。在展示了超强的文本对话能力和一键生图功能后&#xff0c;AI大模型不打算停下&#xff0c;开始挑战搭建3D空间这一更高难度的动作。 这次&#xff0c;Facebook母公司Meta想当一把主导者。几天前&#xff0c;它的首席…

185-二35

Java185-二35单列集合顶层接口collection迭代器增强forlambda表达式list特有方法遍历数据结构数组Linkedlist集合泛型类&#xff0c;泛型方法&#xff0c;泛型结构泛型方法泛型的通配符泛型总结数据结构数据结构&#xff08;二叉树&#xff09;前序遍历数据结构&#xff08;二叉…

crm系统有哪些?具体的功能有哪些?

市面上的CRM系统有很多&#xff0c;例如简道云、销售易、salesforce、纷享销客、SugarCRM等等&#xff0c;这些都是比较知名的&#xff0c;前面也有写过很多关于CRM选型的内容&#xff0c;大家可以点进我的主页翻阅一下。 那么&#xff0c;CRM具体的功能有哪些&#xff1f;下面…

计算机网络 - UDP协议 与 TCP协议可靠性(传输层)

前言 本篇介绍UDP报文格式&#xff0c;认识UDP报文&#xff0c;介绍TCP报文格式&#xff0c;了解TCP可靠性的核心机制&#xff0c;TCP通信中三次握手与四次挥手&#xff1b;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文…

EDA基础概念

EDA基础概念EDA和CADCAD工具EDA工具EDA技术实现目标可编程逻辑器件简称PLD发展历程FPGA简介CPLD简介FPGA和CPLD区别是否需要同时学习FPGA和CPLDXilinx&#xff08;赛灵思&#xff09;公司介绍&#xff08;AMD收购&#xff09;开发工具Xilinx产品Altera&#xff08;阿尔特拉&…

Qt关于QPainter绘制1px宽度图形带来的问题思考

前言 前段时间遇到这样一个问题&#xff0c;使用QPainter绘制直线的时候&#xff0c;设置了笔宽为1像素&#xff0c;但是绘制出来的线条却是2px宽度&#xff0c;而且设置的画笔颜色很明显是降低了透明度&#xff0c;不是最“纯正”的颜色。 当时就感觉非常奇怪&#xff0c;明明…

【FPGA实验1】FPGA点灯工程师养成记

对于FPGA几个与LED相关的实验&#xff08;包括按键点灯、流水灯、呼吸灯等&#xff09;的记录&#xff0c;方便日后查看。这世界上就又多了一个FPGA点灯工程师了&#x1f60f; 成为一个FPGA点灯工程师分三步&#xff1a;一、按键点灯1、按键点灯程序2、硬件实现二、流水灯1、流…

Vue2-黑马(二)

目录&#xff1a; &#xff08;1&#xff09;vue2-基础-属性绑定 &#xff08;2&#xff09;vue2-事件绑定 &#xff08;3&#xff09;vue2-双向绑定 &#xff08;4&#xff09;vue2-计算属性 &#xff08;1&#xff09;vue2-基础-属性绑定 属性与js数据绑定&#xff1a; …