日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

问题 C: Cly的三角形

發布時間:2023/12/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 问题 C: Cly的三角形 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

Cly很喜歡三角形,有一天他遇到了一道和三角形有關的題,但是這道題他簡單了,他懶得做,于是交給了你。
給定一個數組,每次詢問一個子區間,如果能從這個子區間挑出三個數組成三角形輸出clynb,否者輸出clycdd。

輸入

第一行給出數組大小n,查詢次數q (1<=m,q<=1e5)
接下來一行輸入n個數,表示a[i] (1<=a[i]<=1e9)
接下來q行,每行輸入兩個數l,r,代表一個子區間 (1<=l,r<=n)

輸出

對于每個詢問輸出clynb或者clycdd

樣例輸入

5 3
2 1 4 3 5
1 2
1 3
3 5

樣例輸出

clycdd
clycdd
clynb

看了題之后的第一反應是分這么幾步。
1:判斷l—r區域內是否有大于等于三個數字,沒有就輸出clycdd。
2:把數據sort一遍從小到大排序。
3:從第一個到第n-2個開始遍歷,判斷a[i]+a[i+1]>a[i+2]是否成立,成立就輸出clynb,全不成立就輸出clycdd。
4:提交,超時,卒…

賽后看了題解才明白,我們都知道(除了我)斐波那契數列遞推式是a[i]+a[i+1]=a[i+2],第44項為七億多,第45項就十億多了了。題目中
如果這個數列不滿足形成三角形的條件不能形成三角形的條件是a[i]+a[i+1]<=a[i+2],我們就讓a[i]+a[i+1]=a[i+2],這樣就會形成斐波那契數列。然后根據題目中a[i]的范圍在1e9之內我們可以推出:從第45項開始知數列不滿足a[i]=a[i-1]+a[i-2],此時必能形成三角形。于是我們給題目優化一下,當l—r的長度大于45時,就一定是clynb,這樣一來就能少判斷好多數據,時間上也不會超辣~

#include <bits/stdc++.h> using namespace std; #define qc std::ios::sync_with_stdio(0); const int N = 1e5 + 10; long long a[N]; long long b[N];int main() {int n, q;scanf("%d%d", &n, &q);for (int i = 1; i <= n; i++) {scanf("%lld", &a[i]);}while (q--) {int l, r;scanf("%d%d", &l, &r);int len = r - l + 1;if (len <= 2)printf("clycdd\n");else if (len >= 45) {printf("clynb\n");} else {for (int i = 0; i < len; i++) {b[i] = a[i + l];}sort(b, b + len);int flag = 0;for (int i = 0; i < len - 2; i++) {if (b[i] + b[i + 1] > b[i + 2]) {printf("clynb\n");flag = 1;break;}}if (flag == 0)printf("clycdd\n");}}return 0; }

總結

以上是生活随笔為你收集整理的问题 C: Cly的三角形的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。