首页 > 其他分享 >牛客周赛 Round 29

牛客周赛 Round 29

时间:2024-01-30 12:47:47浏览次数:23  
标签:insert int maxheap 29 牛客 maxSize num minheap Round

C题:用桶处理字符串重排

小红拿到了一个字符串,其中一定包含连续子串"xiao",和连续子串"hong"。
请你将字符串重排,使得该字符串包含"xiaohong"的连续子串。

  • 较简单的做法:遍历字符串,给每个字符放到相应的桶中,然后先先输出目标字符串xiaohong,同时对桶进行相对应的调整。最后再按任意顺序输出桶中字符。
  • 赛时我的复杂做法:先找到xiaohong的每个字符在给出字符串的位置,由于重复也需要桶,对于位置标记,最后输出时跳过这些位置。

D题:中位数理解加深,可删除对顶堆杀鸡用牛刀

  • 不动脑子:直接使用可删除对顶堆:

double ans[N];
int a[N];


class MedianFinder
{
    priority_queue<int, vector<int>, greater<int>> minheap;
    priority_queue<int> maxheap;
    unordered_map<int, int> delayed;
    int minSize, maxSize; //decrease delayed

    template <typename T>
    void prune(T &heap)
    {
        while (!heap.empty())
        {
            int num = heap.top();
            if (delayed.count(num))
            {
                delayed[num]--;
                if (delayed[num] == 0)
                    delayed.erase(num);
                heap.pop();
            }
            else
                break;
        }
    }

    void makebalance()
    {
        if (maxSize > minSize + 1)
        {
            minheap.push(maxheap.top());
            maxheap.pop();
            minSize++;
            maxSize--;
            prune(maxheap);
        }
        else if (maxSize < minSize)
        {
            maxheap.push(minheap.top());
            minheap.pop();
            maxSize++;
            minSize--;
            prune(minheap);
        }
    }

public:
    MedianFinder() : minSize(0), maxSize(0) {}

    void insert(int num)
    {
        if (minheap.empty() && maxheap.empty())
        {
            maxheap.push(num);
            maxSize++;
        }
        else
        {
            int topnum = maxheap.top();
            if (topnum < num)
            {
                minheap.push(num);
                minSize++;
            }
            else
            {
                maxheap.push(num);
                maxSize++;
            }
        }
        makebalance();
    }

    void erase(int num)
    {
        delayed[num]++;
        if (num <= maxheap.top())
        {
            maxSize--;
            if (num == maxheap.top())
                prune(maxheap);
        }
        else
        {
            minSize--;
            if (num == minheap.top())
                prune(minheap);
        }
        makebalance();
    }

    double getMedian()
    {
        if (minSize == maxSize)
            return ((double)minheap.top() + maxheap.top()) / 2; //防范int溢出
        else
            return (double)maxheap.top();
    }
};

int main()
{
    MedianFinder mf;

    // 插入一些数据
    cin>>n;
    for(int i=1;i<=n;i++){cin>>a[i];mf.insert(a[i]);}
    // mf.insert(3);
    // mf.insert(1);
    // mf.insert(5);
    // mf.insert(8);
    // mf.insert(2);
for(int i=1;i<=n;i++){
	mf.erase(a[i]);
	//cout<<mf.getMedian() << endl;
	baoliu(mf.getMedian(),1);cout<<endl;
	mf.insert(a[i]);
}
    // // 输出当前中位数
    // cout << "Current median: " << mf.getMedian() << endl;
// 
    // // 删除一个元素
    // mf.erase(1);
// 
    // // 再次输出中位数
    // cout << "Updated median: " << mf.getMedian() << endl;

    return 0;
}

正解:对长度为奇数和偶数分别处理,核心思想,
当处理左边的数的时候,中位数是固定的。
当处理右边的数的时候,中位数是固定的。
中间只有一个数特别处理一次就够
需要注意细节

E题:给定一组数,要求重排以后相邻元素不相同。如果可行需要给出方案

(不过就是套了一个质因数分解的皮)
做法:如果就题论题的数,我们应该考虑直接暴力,赛时就应该以通过为第一优先级,看了hls的代码大体明白了。

标签:insert,int,maxheap,29,牛客,maxSize,num,minheap,Round
From: https://www.cnblogs.com/mathiter/p/17996835

相关文章

  • STM32CubeMX教程29 USB_HOST - 使用FatFs文件系统读写U盘
    1、准备材料正点原子stm32f407探索者开发板V2.4STM32CubeMX软件(Version6.10.0)keilµVision5IDE(MDK-Arm)ST-LINK/V2驱动野火DAP仿真器XCOMV2.6串口助手2、实验目标使用STM32CubeMX软件配置STM32F407开发板USB_OTG_FS为工作在MassStorageHostClass(大容量存储主机类)模......
  • 【2024-01-29】亲自操心
    20:00汝不如人,由恭敬而求教,不可掩饰护短;人不如汝,则谦和而逊让,不可鄙薄逞长。                                                 ——梁章钜昨晚哄睡二宝时,别扭闹得跟以......
  • 【2024潇湘夜雨】WIN11_Pro_23H2.22631.3085软件选装纯净版1.29
    【系统简介】=============================================================1.本次更新母盘来自WIN11_Pro_23H2.22631.3085。2.增加部分优化方案,手工精简部分较多。3.OS版本号为22631.3085。精简系统只是为部分用户安装,个别要求高的去MSDN下。4.集成《DrvCeo-2.16.0.0》网卡版、......
  • 【2024.1.29补题记录】abc335-abc337
    开篇碎碎念总是以开篇碎碎念开写,不加这个有点不太舒服qwq,又是一个周一,开始酣畅淋漓的学习(摸鱼)把之前欠债补一补然后看一下概率abc335总览是23号vp的,出了ABD三题,CWA了一发但是没de出来(没找到错误样例)赛后补了C和EC.LoongTracking很简单真的很简单!!!发现数据如果每次移动更新......
  • 01.29 鲜花:有主题
    我只想把最近所感悟到的给记录下来。所以,确实是有明确主题的:最近的想法的杂谈。可能比较混乱的。但是我仍然会做到写的清新,明白一些,流畅一些。因为这是我的习惯吧。而且这篇文章写的比较疯癫。无所谓了。大家看看我的这一面也无妨。今天我出地铁的时候,我刚想走上电梯,却发现前面......
  • 24.1.29(读后感)
    第二章个人技术和流程2.1单元测试①重要的单元测试:有效解决程序员对模块功能的误解、疏忽或不了解模块的变化之类的问题,使自己负责的模块功能定义尽量明确,模块的质量得到稳定的、量化的保证。②好的单元测试的标准:在最基本的功能/参数上验证程序的正确性单元测试必须由最熟......
  • 1月29日总结
    目录前言(一)MBR分区数据结构(1)MBR分区方式(2)MBL主引导程序代码(3)磁盘签名(4)DPT磁盘分区表(5)结束标志(6)扩展分区(7)MBR分区的局限性(二)GPT分区(1)与GPT相关的分区类型(2)GPT分区的数据结构(3)GPT分区的优势(三)格......
  • 从嘉手札<2024-1-29>
    补一下以前的几篇日记2018-4-6当一个人不在纠结没有什么而是开始珍视他所拥有的一切的时候才算得上真正的成熟个人的意志不能因受到社会的压力而软弱也不能受到自然的压力而萎缩而应当如冬日里的松柏笔直轩昂,凌然傲立2018-4-9又是一夜的噩梦袭扰浓雾弥漫的清晨正如鬼......
  • 1.29寒假每日总结20
    将你的Python代码打包成一个exe文件,方便其他人在没有安装Python环境的情况下运行,可以使用PyInstaller或cx_Freeze等工具将其打包成可执行文件。以下是使用PyInstaller的步骤:首先,确保你已经安装了PyInstaller。你可以使用以下命令在终端或命令提示符中进行安装:CopyCodepipi......
  • 2024.1.29寒假每日总结20
    算法题:514.自由之路-力扣(LeetCode)将你的Python代码打包成一个exe文件,方便其他人在没有安装Python环境的情况下运行,可以使用PyInstaller或cx_Freeze等工具将其打包成可执行文件。以下是使用PyInstaller的步骤:首先,确保你已经安装了PyInstaller。你可以使用以下命令在终端或命......