Codeforces 1634 F. Fibonacci Additions —— 斐波那契数列加,想法

2023-11-12

This way

题意:

给你长度为n的数组a和数组b,每次会有一个操作:
x l r
如果x是A表示在数组a上进行操作,否则是b
l r表示将区间[l,r]的数一一对应加上斐波那契数列[1,r-l+1]的数。
问你最后a和b是否相等。

题解:

斐波那契数列加的题目之前好像做到过?447E吧,那个是使用到了斐波那契的性质,有点忘了到时候回去再看看。

这道题首先想到的就是把b减到a上,然后就只用在一个数组上,每次查看是否全为0即可了。
然后该怎么办呢,用线段树该怎么做我想了一会想不太到,于是更改思路:
设f[x]就是斐波那契数列的第x位,f[x]=f[x-1]+f[x-2]。
既然斐波那契数列是简单的相加前推后,它可以使用差分表示。
如果用a[i]表示a[i]-a[i-1]-a[i-2]呢,那区间加上f[l:r]不就变成了a[l]+1,a[r+1]-f[r-l+2]?
这是正常的差分,但是我们这里a[i]减去了a[i-1]和a[i-2],所以a[r]的变动会影响到a[r+2]。
对于a[r+3],它是维护了a[r+2]和a[r+1],既然这两个没变,那a[r+3]也就没变。
那么a[r+2]变了多少?我们可以发现a[r]加上了f[r-l+1],a[r+1]不变,那么a[r+2]由于维护的是a[r+2]-a[r+1]-a[r],所以应该减小f[r-l+1]。
然后用num维护当前0的数量。

不过这里好容易TLE啊,我怎么改怎么改都T,最后把longlong改掉了才过

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=3e5+5;
int f[N],a[N],b[N];
int n,q;
    int mod;
void add(int &x,int y){
    x+=y;
    if(x>=mod)x-=mod;
    if(x<0)x+=mod;
}
int main()
{
    cin.tie(0);
    ios::sync_with_stdio(false);
    cin>>n>>q>>mod;
    f[1]=f[2]=1;
    int num=0;
    for(int i=3;i<N;i++)add(f[i],f[i-1]+f[i-2]);
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=1;i<=n;i++){
        cin>>b[i],add(b[i],a[i]-2*b[i]);
        add(a[i],-a[i]+b[i]-b[i-1]);
        if(i>1)add(a[i],-b[i-2]);
        num+=a[i]==0;
    }
    while(q--){
        char s[5];
        int l,r;
        cin>>s>>l>>r;
        if(s[0]=='A'){
            if(a[l]==0)num--;
            if(r+1<=n&&a[r+1]==0)num--;
            if(r+2<=n&&a[r+2]==0)num--;
            add(a[l],1),add(a[r+1],-f[r-l+2]),add(a[r+2],-f[r-l+1]);
            if(a[l]==0)num++;
            if(r+1<=n&&a[r+1]==0)num++;
            if(r+2<=n&&a[r+2]==0)num++;
        }
        else{
            if(a[l]==0)num--;
            if(r+1<=n&&a[r+1]==0)num--;
            if(r+2<=n&&a[r+2]==0)num--;
            add(a[l],-1),add(a[r+1],f[r-l+2]),add(a[r+2],f[r-l+1]);
            if(a[l]==0)num++;
            if(r+1<=n&&a[r+1]==0)num++;
            if(r+2<=n&&a[r+2]==0)num++;
        }
        if(num==n)
            cout<<"YES\n";
        else
            cout<<"NO\n";
    }
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Codeforces 1634 F. Fibonacci Additions —— 斐波那契数列加,想法 的相关文章

随机推荐

  • PCL 偏度平衡滤波(SKF)算法

    目录 一 算法原理 1 原理概述 2 参考文献 二 代码实现 三 结果展示 一 算法原理 1 原理概述 SKF算法假定点云中自然地面点的高程概率密度分布服从正态分布 非地面点会使得点云中点的高程概率密度分布偏离正态分布 呈现出偏态分布 偏度
  • CRC循环冗余校验码

    CRC校验 CRC Cyclic Redundancy Check 即循环冗余检验码 是数据通信领域中最常用的一种差错校验码 其特征是信息字段和校验字段的长度可以任意选定 基本原理 在K位信息码后再拼接R位的校验码 整个编码长度为N位 因此
  • 服务器硬件测试选型

    面对琳琅满目的服务器硬件品牌和五花八门的硬件型号规格 如何选择高性价比的硬件配置 是系统运维的一项重要工作 系统工程师需要根据产品线的不同需求 测试服务器的各项性能以及功耗 同时结合成本确定出性价比最高的服务器配置 因此 硬件测试便成为了服
  • U-Boot 学习

    相关概念 参考文章 u boot FIT image介绍 wowotech net X 010 UBOOT 使用booti命令启动kernel Bubblegum 96平台 wowotech net FDT device tree 全称是f
  • SHELL入门学习

    SHELL SHELL 入门学习 shell 变量 shell echo shell printf shell test shell if then shell While shell function SHELL 入门学习 shell 变
  • 1.[springMvc]Servlet的基础知识

    Servlet的基础知识 servlet是啥 Servlet运行流程 示例 Servlet GenericServlet HttpServlet ServletContext Filter servlet映射器 servlet是啥 Java
  • 联合概率、边际概率、条件概率

    一时忘了联合概率 边际概率 条件概率是怎么回事 回头看看 某离散分布 联合概率 边际概率 条件概率的关系 其中 Pr X x Y y 为 XY的联合概率 Pr X x 为 X的边际概率 Pr X x Y y 为 X基于Y的条件概率 Pr Y
  • Openwrt编译报错 TCP Fast Open is not available for client mode 的解决办法

    报错信息 configure error TCP Fast Open is not available for client mode please rerun without enable tfo client gmake 3 Makef
  • Python安装教程步骤2:Windows中创建虚拟环境安装Pytorch并在PyCharm中配置虚拟环境

    python安装教程步骤2 windows中Anaconda创建虚拟环境安装pytorch并在pycharm中使用虚拟环境 作者介绍 windows中Anaconda创建虚拟环境安装pytorch 1 添加镜像源 2 创建虚拟环境 3 进入
  • ubuntu16.04详细安装pytorch(GPU)

    安装pytorch要安装两个模块 torch和torchvision torch是主模块 用来搭建神经网络 torchvision是辅模块 里面有搭建好的网络可以直接用 1 安装pip3 ubuntu自带python3 5和2 7 所以没装
  • linux 设置静态 ip 或者 修改 DNS

    设置 linux 静态 ip 或者 添加DNS preface 操作步骤 1 执行命令 nmtui 2 确认设置是否成功 supplements 3 1 linux 中 子网掩码的表示 3 2 DNS 和 ip 设置 3 3 DHCP 协议
  • Ribbon负载均衡(一)Ribbon实战

    Ribbon实战 文章目录 Ribbon实战 1 注册中心 1 1 服务注册到注册中心 1 2 服务注册列表Ribbon负载均衡选取相应节点 2 负载均衡方案 2 1 集中式负载均衡 2 2 进程内聚在均衡 3 Ribbon实践 3 1 配
  • Onvif协议学习:14、球机云台控制PTZ

    Onvif协议学习 14 球机云台控制PTZ 文章目录 Onvif协议学习 14 球机云台控制PTZ 一 介绍 二 代码实现 八个方向 放下及缩小控制 聚焦控制 原文链接 https blog csdn net u013566528 art
  • 步进电机原理及驱动

    这里把步进电机的资料做个整合 文章目录 步进电机是什么 原理 定子 定子的种类 转子及其种类 工作方式 单拍方式 双拍方式 单双拍方式 通电方式 驱动器 驱动程序 步进电机是什么 什么是步进电机 步进电机是将电脉冲信号 转变为角位移或线位移
  • Nginx概念及应用

    Nginx 一 反向代理 概念 反向代理服务器位于用户与目标服务器之间 但是对于用户而言 反向代理服务器就相当于目标服务器 即用户直接访问反向代理服务器就可以获得目标服务器的资源 同时 用户不需要知道目标服务器的地址 也无需在用户端做任何设
  • 2023年2月浙江省中小企业协会与各专委会大事记

    1 1月13日上午 协会领导蔡章生带队走访国家绿色技术交易中心 调研绿色技术创新工作 与国家绿色技术交易中心副主任贺沛宇 中教能源研究院黄刚院长 线上视频参会 项目主管郦剑飞等进行座谈 研究推进 双碳 产业 EATNS碳管理体系建设以及节能
  • 计算机网络知识点总结——第二章物理层

    第二章 物理层 一 概述 重点概念 二 数据通信 一 数据模型 二 数据通信相关术语 三 三种通信方式 四 数据传输方式 五 同步传输 异步传输 六 小节脑图 七 码元 八 数字通信系统数据传输速率 码元传输速率 码元速率 波形速率 调制速
  • 知识体系之MySQL

    目录 前言 1 一条select是怎么执行的 1 1 连接器 1 1 1 连接器的工作 1 1 2 长 短连接 1 2 查询缓存 1 3 解析器 1 4 执行SQL 1 4 1 预处理器 1 4 2 优化器 1 4 3 执行器 2 一条up
  • mysql有numeric类型吗_mysql数值类型 - numeric

    本文介绍php出现Warning A non numeric value encountered问题 用实例分析出现这种错误的原因 并提供避免及解决问题的方法
  • Codeforces 1634 F. Fibonacci Additions —— 斐波那契数列加,想法

    This way 题意 给你长度为n的数组a和数组b 每次会有一个操作 x l r 如果x是A表示在数组a上进行操作 否则是b l r表示将区间 l r 的数一一对应加上斐波那契数列 1 r l 1 的数 问你最后a和b是否相等 题解 斐波