CCF 202203-2 出行计划

又是差分?!

自己写的时候不知道怎么差分,这个地方需要加强训练。

看了大佬的文章,他是这么说的:

70分代码的思路我们是站在人的角度处理问题,即按照他的思路(即题目要求)一步一步处理问题,优先解决人的需求;

100分代码思路中,我们优先处理场所需求,即判断出进入该场所需要的最早时间核酸报告(left)和最晚时间核酸报告(right)后考虑人的需求,即人在left~right这个时间范围内进入场所都是符合要求的,可将问题转化为对区间的处理:核酸检测的时间t+等待核酸检测的时间k所在的点有多少个满足条件的场所

这叫什么?这叫思维的开拓,多角度解决问题。【面向对象(误😓)】

AC代码:

#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;
}

 

参考资料:(14条消息) CCF-CSP 202203-2 出行计划 差分算法满分题解+解题思路_只须一笑不须愁X的博客-CSDN博客

posted @ 2022-07-19 17:48  夏莱发电厂的Sensei  阅读(218)  评论(0)    收藏  举报