6818. 【2020.10.07提高組模擬】數列遞推
Description
Input
Output
Sample Input
Sample Input1 8 1 2 3 4 5 6 7 8 2 10 -6 1 0 0 1 Sample Input2 3 0 1 2 2 -2 3 1 3 -2 2
Sample Output
Sample Output1 2 1 1 1 Sample Output2 1 0 0 1 【更多的樣例】 更多的樣例見下發檔案。其中除了前 3 個樣例外還有約定分別和測試點 1, 9, 14 相同的樣例各一個。
Data Constraint
Solution
分類討論,考慮到k為正,處理較為簡單。
若當兩個相鄰的a同號,那麼數列後面的數一定會快速增大或減小。
否則就會一正一負地交替,且慢慢接近0。
影像如下:
最大值或最小值一定在交替的前面,或單調地最後面。
由於單調區間增速很大,我們只需要在它大於開頭或小於開頭的值算出來比較大小即可。
Code
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define I int
#define ll long long
#define F(i,a,b) for(I i=a;i<=b;i++)
#define Fd(i,a,b) for(I i=a;i>=b;i--)
#define N 300003
using namespace std;
ll n,T,s[N],f[N],k,mn,mx,bz1,bz2,dw,up;
char c;
void R(ll &x){
x=0;I w=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
x*=w;
}
I main(){
freopen("seq.in","r",stdin);
freopen("seq.out","w",stdout);
R(n);
F(i,1,n) R(s[i]);
R(T);
while(T--){
bz1=bz2=dw=up=0;mx=mn=-1;
R(f[0]),R(f[1]),R(k);
if(!f[0]&&!f[1]){printf("%d %d\n",s[1],s[1]);continue;}
if(f[0]>=0&&f[1]>=0){
printf("%d ",s[n]);
if(s[1]==0&&s[2]==1){
if(f[0]<=f[1]) printf("0\n");
else printf("1\n");
}
else printf("%d\n",s[1]);
continue;
}
if(f[0]<=0&&f[1]<=0){
if(s[1]==0&&s[2]==1){
if(f[0]>=f[1]) printf("0 ");
else printf("1 ");
}
else printf("%d ",s[1]);
printf("%d\n",s[n]);
continue;
}
I j=0;
F(i,0,1){
if(s[j+1]==i){
j++;
if(mx==-1||f[s[j]]>f[mx]) mx=s[j];
if(mn==-1||f[s[j]]<f[mn]) mn=s[j];
}
}
F(i,2,s[n]){
f[i]=f[i-1]*k+f[i-2];
if(s[j+1]==i){
j++;
if(mx==-1||f[s[j]]>f[mx]) mx=s[j];
if(mn==-1||f[s[j]]<f[mn]) mn=s[j];
}
if(f[i]>0&&f[i-1]>0) bz1=1;
if(f[i]<0&&f[i-1]<0) bz2=1;
if(bz1&&f[i]>f[0]&&f[i]>f[1]){up=1;break;}
if(bz2&&f[i]<f[0]&&f[i]<f[1]){dw=1;break;}
}
if(up) mx=s[n];
if(dw) mn=s[n];
if(mx<0) mx=s[1];if(mn<0) mn=s[1];
printf("%d %d\n",mx,mn);
}
return 0;
}
相關文章
- 2020.10.07【普及組】模擬賽C組 總結
- 【比賽】CSP提高組模擬1
- 2020.10.31【NOIP提高A組】模擬總結
- 重慶強校模擬賽,提高組堪比省賽
- CCF-NOIP-2018 提高組(複賽) 模擬試題(一)
- CCF-NOIP-2018 提高組(複賽) 模擬試題(三)
- 暑假集訓CSP提高模擬4 & 暑假集訓CSP提高模擬5
- 【組合數學】遞推方程 ( 有重根遞推方程求解問題 | 問題提出 )
- 遞推,遞迴,貪心,列舉思想遞迴
- 使用argparse模組新增命令列引數命令列
- Python命令列引數解析模組argparsePython命令列
- 「模擬賽」暑期集訓CSP提高模擬15(8.7)
- 「模擬賽」暑期集訓CSP提高模擬5(7.22)
- 「模擬賽」暑期集訓CSP提高模擬6(7.23)
- 「模擬賽」暑期集訓CSP提高模擬10(7.28)
- 「模擬賽」暑期集訓CSP提高模擬3(7.20)
- PAT-B 1084 外觀數列 【模擬】
- 遞推--找數字
- 逆天提高組模擬,三道T4放一起
- 命令列引數解析模組argparse的使用命令列
- PAT-B 1019 數字黑洞【陣列+模擬】陣列
- 數列遞推形式的極限&正定,負定,不定與形式導數
- [轉載] 遞推數列不動點法的淺顯原理
- 暑假集訓CSP提高模擬18
- 暑假集訓CSP提高模擬17
- 暑假集訓CSP提高模擬19
- 暑假集訓CSP提高模擬12
- 暑假集訓CSP提高模擬3
- 暑假集訓CSP提高模擬4
- time模組,collections模組,佇列和棧佇列
- 2020秋資料結構實驗第一題:兔子數列模擬(斐波那契數列模擬)C++實現資料結構C++
- noip模擬9[斐波那契·數顏色·分組](洛谷模擬測試)
- 回顧二分與bfs(或者說是遞推)和簡單模擬
- 2020.10.08【普及組】模擬賽C組
- 暑集假訓SCP提高擬模21
- 序列化模組,隨機數模組,os模組,sys模組,hashlib模組隨機
- Profinet遠端IO模組:模擬量模組_軟體組態說明
- 【遞迴】小q的數列遞迴