CCF-CSP 202203-2 出行计划 差分算法满分题解+解题思路_ccf csp2022032-程序员宅基地

技术标签: c++  ccf  CCF-CSP  

CCF-CSP 202203-2 出行计划 差分算法满分题解+解题思路

题目链接:202203-2 出行计划

70分思路:

  • 按照题目要求,直接设置两个数组,记录进入场所的时刻t和单位时间c,即int t[N],c[N];
  • 由于需要知道核酸检测结果出来的时刻,则直接设置为l,即int l = q+k;
  • 双重循环进行判断,外循环为输入q,内循环遍历数组
  • 进入场所的时刻t必须满足:已出检测结果+检测结果未过期

70分具体代码如下:

#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5+10;//数据范围
int n,m,k;//输入
int t[N],c[N];//记录t时刻,c单位时间
int main()
{
    
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)
    {
    
        cin>>t[i]>>c[i];
    }
    for(int i=1;i<=m;i++)
    {
    
        int sum = 0;//用于输出
        int q;
        cin>>q;
        int l = q+k;//定义时间的左边界,即检测结果出来的时刻
        for(int j=1;j<=n;j++)
        {
    
            if(l<=t[j]&&l+c[j]-1>=t[j])//进入场所的时刻t必须满足:已出检测结果+检测结果未过期
            {
    
                sum++;
            }
        }
        cout<<sum<<endl;
    }
    return 0;
}

100分思路:

  • 由70分代码可知,运行时间过长的原因在于双重循环
  • 仔细思考后发现:在外层循环中,qi按照时间顺序给出,则存在重复判断的情况,例如,无论q=1还是q=2,第一组数据5 24都不符合要求,但是在70分程序中该情况盘端了两次,导致重复
  • 我们接下来只需要将这部分重复判断的操作去除,将两层循环改成一层循环即可
  • 70分代码的思路我们是站在人(小C)的角度处理问题,即按照他的思路(即题目要求)一步一步处理问题,优先解决人的需求;接下来100分代码思路中,我们优先处理场所需求,即判断出进入该场所需要的最早时间核酸报告(left)和最晚时间核酸报告(right)
  • 后考虑人的需求,即人在left~right这个时间范围内进入场所都是符合要求的,可将问题转化为对区间的处理:核酸检测的时间t+等待核酸检测的时间k所在的点有多少个满足条件的场所
  • 此100分代码考虑差分算法,便于在left~right之间加上一个数,时间复杂度为O(n)
  • 注意数组的大小开成4e5+10,因为会考虑到t+q即最大为2e5+2e5

100分具体代码如下:

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 4e5+10;
int n,m,k;
int b[N];//差分数组
//令l~r之间的数都+c
void insert(int l,int r,int c)
{
    
    b[l]+=c;
    b[r+1]-=c;
}
int main()
{
    
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)
    {
    
        int x,y;
        cin>>x>>y;
        int left = x-y+1;//定义左边界
        left = left>0?left:1;
        int right = x;//定义右边界
        insert(left,right,1);
    }
    //前缀和操作,得到各个点的数值
    for(int i=1;i<=N;i++)
    {
    
        b[i] = b[i-1]+b[i];
    }
    while(m--)
    {
    
        int x;
        cin>>x;
        cout<<b[x+k]<<endl;//直接得到x+k处的数值
    }
    return 0;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_53641110/article/details/124031629

智能推荐

windows 11系统安装_win11安装程序-程序员宅基地

文章浏览阅读1.2w次,点赞17次,收藏166次。1、制作好U盘之后,把U盘接上需要安装系统的机器,台式机或一体机可在开机按F12键调出引导菜单,台式机安装的时候建议断开网线,笔记本开机按F12或者Fn+F12键调出引导菜单。2、出现菜单选项后,选择“Boot Menu”启动菜单回车,选择USB项回车启动开始安装系统。6、输入PIN密码,(如果主机支持生物识别设备,也可在输入PIN后,继续录入指纹或人脸)4、插入准备好的U盘,如果没有显示,点击刷新驱动器列表,点击下一步。7、选择同步设备,如不想同步,选择设置为新设备。3、选择制作U盘,点击下一步,_win11安装程序

【深度学习】归一化_深度学习 那些情况 要做 归一化-程序员宅基地

文章浏览阅读1.8w次,点赞8次,收藏11次。​ 以前在神经网络训练中,只是对输入层数据进行归一化处理,却没有在中间层进行归一化处理。要知道,虽然我们对输入数据进行了归一化处理,但是输入数据经过 $ \sigma(WX+b) $ 这样的矩阵乘法以及非线性运算之后,其数据分布很可能被改变,而随着深度网络的多层运算之后,数据分布的变化将越来越大。如果我们能在网络的中间也进行归一化处理,是否对网络的训练起到改进作用呢?答案是肯定的。​ 这种在神经网络中间层也进行归一化处理,使训练效果更好的方法,就是批归一化Batch Normalization(BN)。_深度学习 那些情况 要做 归一化

微信小程序支付接口实现(java后台)_小程序后台java支付接口-程序员宅基地

文章浏览阅读1.2w次,点赞12次,收藏101次。#(Notice:以下所有经验也是我根据网上的经验整理的,如有侵权可以联系我删除,QQ 654303408。 有问题讨论也可联系我,QQ同上。)#(Tips:我是第一次开发,一个刚毕业的java工程师,我觉得我并非天赋异禀,我能学会,相信聪敏的你,一定可以)#(PS:目前微信拥有无可撼动的人口基数,越来越多的项目开发是基于微信小程序,或者APP。但是支付方式无非两种,一种是支付宝,一种是微信支..._小程序后台java支付接口

python web server_用Python建立最简单的web服务器-程序员宅基地

文章浏览阅读27次。第一个python Web程序——简单的Web服务器。与其它Web后端语言不同,Python语言需要自己编写Web服务器。如果你使用一些现有的框架的话,可以省略这一步;如果你使用Python CGI编程的话,也可以省略这一步;用Python建立最简单的web服务器利用Python自带的包可以建立简单的web服务器。在DOS里cd到准备做服务器根目录的路径下,输入命令:python -m Web服务..._pyjwt webserver

【图像重建指标 Metrics】均方误差RMSE及平均绝对误差MAE的定义和区别_rmse与mae有换算公式吗-程序员宅基地

文章浏览阅读1.3w次,点赞3次,收藏23次。RMSE和MAE能很好的反应图像的重建结果与真实结果间的差异。_rmse与mae有换算公式吗

Kotlin Gradle Junit单元测试print输出控制台_gradle 打印日志 system. out.print-程序员宅基地

文章浏览阅读3.4k次。背景默认情况下,Gradle 单元测试,是无法使用 System.out.println 这样打印变量信息的,这会让我们debug变得非常麻烦。百度网上很多方案,,但都比较麻烦,也很容易踩坑,。换了个搜索姿势,google了下,原来方案如此简单。解决在你的模块下的build.gradle.kts添加如下的配置:tasks.withType<Test> { this.testLogging { this.showStandardStreams = true _gradle 打印日志 system. out.print

随便推点

sqlmap的使用--绕过--自带脚本tamper_sqlmap绕过脚本-程序员宅基地

文章浏览阅读2.2k次,点赞2次,收藏11次。sqlmap在默认的的情况下除了使用char()函数防止出现单引号,没有对注入的数据进行修改,还可以使用–tamper参数对数据做修改来绕过waf等设备。命令格式:sqlmap -u [url] --tamper [模块名]通过使用whereis sqlmap查看sqlmap安装路径,自带的脚本一般是在usr/share/sqlmap/tamper下,我的是1.6.3版本一共有66个自带脚本下边引一些常用的脚本:apostrophemask.py适用数据库:ALL作用_sqlmap绕过脚本

换行分隔符_分隔符 换行-程序员宅基地

文章浏览阅读1.7k次。windows:\r\nlinux:\rmac:\n_分隔符 换行

waves效果器_混音选择困难2,Waves均衡器全介绍与理论使用心得-程序员宅基地

文章浏览阅读4.2k次,点赞2次,收藏8次。喜欢「音乐杂谈」这个主题的朋友可以关注我的头条号,将会在不定期发表一些音乐理论以外的音乐话题的文章或者是音乐知识的干货 。(此文为混音师天职老师 发布于今日头条的原创文章,转载请告知并注明出处)通篇写作整理下来差不多花了7个小时,不管怎样,施舍点个赞吧。哈哈哈!继上一次「音乐杂谈41」混音选择困难第一期,给大家介绍了Waves全家桶的大部分压缩器之后,本篇,我们将来看看,Waves全家桶的大部分均..._waves功能详解

在Android中播放音频和视频_android 播放语言视频-程序员宅基地

文章浏览阅读2.8k次。Android媒体包提供了可管理各种媒体类型的类。这些类可提供用于执行音频和视频操作。除了基本操作之外,还可提供铃声管理、脸部识别以及音频路由控制。本文说明了音频和视频操作。本文简介媒体包提供了可管理各种媒体类型的类。这些类可提供用于执行音频和视频操作。除了基本操作之外,还可提供铃声管理、脸部识别以及音频路由控制。本文说明了音频和视频操作。范围:_android 播放语言视频

Sublime and Markdown-程序员宅基地

文章浏览阅读2.7k次。Sublime & Markdown文章目录Sublime & Markdown安装 Sublime设置 Sublime安装插件Package ControlMarkdownEditingMarkdown PreviewLiveReloadauto-saveOmniMarkupPreviewerEvernote插件&主题插入图片Ctrl+vHTML语法Markdown语法...

android uboot log,RK3288 Android 8.1系统uboot logo过渡到kernel logo会花一下-程序员宅基地

文章浏览阅读695次。在调试RK3288 Android 8.1系统遇到一个问题:开机启动uboot logo过渡到kernel log的过程中会花掉直到没有显示,再出现kernel logo。分析:打印串口log时发现,uboot阶段显示一切正常,进入kernel以后就开始花掉了然后变成没有显示了,感觉像是慢慢掉电了一样,再继续查看log发现如下打印:[ 0.363167] Registered fiq deb..._mtk 转屏后 logo uboot 转kernel 显示异常

推荐文章

热门文章

相关标签