首页 > 其他分享 >F. Fibonacci Additions

F. Fibonacci Additions

时间:2023-08-20 20:33:54浏览次数:42  
标签:ci temp int cnt Fibonacci 操作 cr Additions

 题意:给两个长度相同的数组,给出q次操作,a操作时对于a中的l与r,l项加上斐波那契的第一项,l+1加第二项,以此类推。b操作把前文中a数组改为b即可。操作完输出yes或no,表示操作后两个数组值在模mod后是否相同。

做法:考虑斐波那契原有的性质,fn=fn-1+fn-2,所以对于a操作,如果n在闭区间[l+1,r]中,设a,b差值数组为c,namo,ci减ci-1减ci-2这个值是不变的,所以我们只需要维护三个变量就好了

那便是 (ci)-(ci-1)-(ci-2),(cr+1)-(cr)-(cr-1),(cr+1)-(cr)-(cr-1)。进一步的说,设di=(ci)-(ci-1)-(ci-2),则让dl,dr+1,dr+2分别加上或减去1,fab[r+1],fab[r]。加和减取决于你定义的c是a减b还是b减a以及a操作中。然后定义cnt变量为非0的数量,每一次看看这三个值有无对cnt造成影响。如果cnt为0就是yes,否则就是no。本题就可以愉快的ac了。感谢阅读

void solve(){
    int n,q,m;cin>>n>>q>>m;
    vector<int>fbi(n+1);
    fbi[1]=1,fbi[2]=1;
    int x=1,y=1;
    for(int i=3;i<=n;i++){
        int temp=y;y=(y+x)%m;x=temp;fbi[i]=y%m;
    }
    vector<int>a(n+1);vector<int>b(n+1);vector<int>c(n+1);vector<int>d(n+1);
    for(int i=1;i<=n;i++)cin>>a[i];
        int cnt=0ll;
    for(int i=1;i<=n;i++){
        cin>>b[i];c[i]=(a[i]-b[i])%m;
        if(i==1)d[i]=c[i];
        if(i>=2)d[i]=(c[i]-c[i-1]-c[i-2])%m;
        if(d[i]!=0)cnt++;
    }
    while(q--){
        char c;cin>>c;
        if(c=='A'){
            int l,r;cin>>l>>r;
            int temp=d[l];
            d[l]+=1;d[l]%=m;
            if(d[l]==0)cnt--;
            if(temp==0)cnt++;
            if(r<n){
                temp=d[r+1];
                d[r+1]-=fbi[r-l+1]+fbi[r-l];
                d[r+1]%=m;
                if(d[r+1]==0)cnt--;
                if(temp==0)cnt++;
                if(r<n-1){
                    temp=d[r+2];
                    d[r+2]-=fbi[r-l+1];
                    d[r+2]%=m;
                    if(d[r+2]==0)cnt--;
                    if(temp==0)cnt++;
                }
            }
            if(cnt==0)cout<<"YES\n";
            else cout<<"NO\n";
        }
        else{
            int l,r;cin>>l>>r;
            int temp=d[l];
            d[l]-=1;d[l]%=m;
            if(d[l]==0)cnt--;
            if(temp==0)cnt++;
            if(r<n){
                temp=d[r+1];
                d[r+1]+=fbi[r-l+1]+fbi[r-l];
                d[r+1]%=m;
                if(d[r+1]==0)cnt--;
                if(temp==0)cnt++;
                if(r<n-1){
                    temp=d[r+2];
                    d[r+2]+=fbi[r-l+1];
                    d[r+2]%=m;
                    if(d[r+2]==0)cnt--;
                    if(temp==0)cnt++;
                }
            }
            if(cnt==0)cout<<"YES\n";
            else cout<<"NO\n";
        }
    }
}

 

标签:ci,temp,int,cnt,Fibonacci,操作,cr,Additions
From: https://www.cnblogs.com/shi5/p/17644527.html

相关文章

  • Go - A Tour of Go Exercise: Fibonacci closure
    packagemainimport"fmt"//fibonacciisafunctionthatreturns//afunctionthatreturnsanint.funcfibonacci()func()int{f0,f1:=0,1returnfunc()int{f:=f0f0,f1=f1,f+f1returnf}}......
  • J Fibonacci Cane
    湖南省第十八届大学生计算机程序设计竞赛(HNCPC2022)J题原题链接:https://cpc.csgrandeur.cn/csgoj/problemset/problem?pid=1198没错,这个题是签到题:判断斐波那契区间有没有一段的和等于n,由于n≤1e15,所以直接暴力求解。题解代码如下#include<iostream>usingnamespacestd;ty......
  • Exercise: Fibonacci closure
    Go里面斐波那契数列的简单实现。我那会儿的教材是1,1起算,即f(0)=1,f(1)=1。Go的Exercise说明里面是0,1起算。既然是用Go写,索性就用它的定义吧,主要代码如下(Go的这个multipleresult用起来是真方便):1funcfibonacci()func()int{2F0,F1:=0,13returnfunc()int......
  • 【并查集】 HDOJ 4786 Fibonacci Tree
    就是求出搞成最小生成树的最少白边和最多白边的数量。。。。#include<iostream>#include<queue>#include<stack>#include<map>#include<set>#include<bitset>#include<cstdio>#include<algorithm>#include<cstring>#include<......
  • Python - fibonacci
    Soisthereeveragoodplacetousemutabledefaults?Yes!Mutabledefaultscanbeveryusefulforcachingand/orrecursivealgorithms:deffibonacci(n,cache={0:0,1:1}):ifnincache:returncache[n]else:value=fibonacci(n-......
  • 佳佳的 Fibonacci
    目录题目链接题目描述做题思路1.我推它的公式2.我搞它的矩阵代码实现题目链接题目描述私货:《消失点》——洛天依\Icelter。做题思路1.我推它的公式双倍题解给下一位首先,\(f_i=f_{i-1}+f_{i-2}\)其次,\(T_i=T_{i-1}+if_i\)易得,\(T_i=T_{i-1}+nf_{n-1}+nf_{n-2}\)所以我......
  • 佳佳的 Fibonacci 题解
    佳佳的Fibonacci题解题目:题解:数据范围很大,暴力超时,考虑的是矩阵优化递推,关键是求出递推矩阵,然后结合矩阵快速幂求解如何求解递推矩阵?我们首先知道斐波那契的递推式:f[i]=f[i-1]+f[i-2]——>①然后题目中给我们了T(n)的递推式:T(n)=F[1]+2F[2]+3F[3]+...+nF[n]——>②考......
  • 从蓝桥杯来谈Fibonacci数列
    2014年蓝桥杯的第九题是这样描述的:     给定Fibonacci数列F[],其中,,求表达式      的值。其中在讲解这道题之前,我们先来看一个简单版的。题目如下:题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1194分析:可以看出本题就是直接求,虽然这里的......
  • CF446C. DZY Loves Fibonacci Numbers
    好牛的题,写一下。题意:维护一个序列\(a\),长度为\(n\),有\(m\)次操作:1lr:对于\(i\in[l,r]\),\(a_i\leftarrowa_i+f_{i-l+1}\)。2lr:求\(\displaystyle\left(\sum_{i=l}^ra_i\right)\bmod(10^9+9)\)。其中\(f_{i}\)表示第\(i\)个斐波那契数(\(f_0=0,f_1=1,f_n=f_......
  • 【CF446C】DZY Loves Fibonacci Numbers(线段树)
    Description给定一个序列,资瓷区间加上一个斐波那契数列,区间求和。Solution有一个性质:fib[a+b]=fib[a−1]×fib[b]+fib[a]×fib[b+1]fib[a+......