Cly的三角形 (思维+斐波那契)
題目鏈接:點(diǎn)擊這里
題目大意:
給出一個(gè)長(zhǎng)度為 nnn 的序列 aaa ,有 qqq 次詢問(wèn),每次詢問(wèn)含有一組 l,rl,rl,r 求 ala_lal? 到 ara_rar? 中是否能找出三條邊使之構(gòu)成三角形
題目分析:
我們先從暴力出發(fā),我們發(fā)現(xiàn):
對(duì)于一次詢問(wèn)的 l,rl,rl,r 我們將 ala_lal? 到 ara_rar? 進(jìn)行從小到大的排序,然后逐個(gè)枚舉相鄰三個(gè)的元素,如果滿足 a[i]+a[i+1]>a[i+2]a[i]+a[i+1]>a[i+2]a[i]+a[i+1]>a[i+2] 則可以構(gòu)成三角形,如果 a[i]a[i]a[i] 和 a[i+1]a[i+1]a[i+1] 都不能和 a[i+2]a[i+2]a[i+2] 構(gòu)成三角形那么其他的數(shù)更沒(méi)辦法滿足兩邊之和大于 a[i+2]a[i+2]a[i+2] 。但是其復(fù)雜度是 O(nlogn)O(nlogn)O(nlogn) 是難以支持 qqq 次查詢的
我們繼續(xù)考慮優(yōu)化 a[i]+a[i+1]>a[i+2]a[i]+a[i+1]>a[i+2]a[i]+a[i+1]>a[i+2] ,我們發(fā)現(xiàn)當(dāng)讓不等號(hào)為等號(hào)時(shí)有 a[i]+a[i+1]=a[i+2]a[i]+a[i+1]=a[i+2]a[i]+a[i+1]=a[i+2] 此式子為斐波那契數(shù)列的遞推式,而我們知道斐波那契數(shù)列在第 464646 項(xiàng)的時(shí)候就爆 intintint 了,題目給出a[i]a[i]a[i] 的范圍是 a[i]≤1e9a[i]\le 1e9a[i]≤1e9 ,因此當(dāng) r?l+1≥45r-l+1\ge 45r?l+1≥45 即區(qū)間長(zhǎng)度大于 454545 時(shí)我們可以直接判斷其可以找到三個(gè)元素使之作為三角形的三邊,對(duì)于 r?l+1<45r-l+1< 45r?l+1<45 時(shí)用之前那個(gè) nlognnlognnlogn 的方法暴力處理即可,其時(shí)間復(fù)雜度為 O(q45log45)O(q45log45)O(q45log45)
具體細(xì)節(jié)見(jiàn)代碼:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<vector> #include<set> #include<map> #define ll long long #define inf 0x3f3f3f3f using namespace std; int read() {int res = 0,flag = 1;char ch = getchar();while(ch<'0' || ch>'9'){if(ch == '-') flag = -1;ch = getchar();}while(ch>='0' && ch<='9'){res = (res<<3)+(res<<1)+(ch^48);//res*10+ch-'0';ch = getchar();}return res*flag; } const int maxn = 1e5+5; const int mod = 1e9+7; const double pi = acos(-1); const double eps = 1e-8; int n,q,a[maxn],tmp[maxn]; int main() {n = read();q = read();for(int i = 1;i <= n;i++)a[i] = read();while(q--){int l = read(),r = read();int len = r-l+1;if(len >= 45) {puts("clynb");continue;}if(len <= 2) {puts("clycdd");continue;}for(int i = 0;i < len;i++)tmp[i] = a[l+i];sort(tmp,tmp+len);bool flag = false;for(int i = 2;i < len;i++){if(tmp[i-2]+tmp[i-1] > tmp[i]){flag = true;break;}}if(flag) puts("clynb");else puts("clycdd");}return 0; }總結(jié)
以上是生活随笔為你收集整理的Cly的三角形 (思维+斐波那契)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MySQL ORDER BY 1 DES
- 下一篇: 编解码器:Opus编解码器的接口及使用