PAT甲级1085 Perfect Sequence :[C++题解]双指针
生活随笔
收集整理的這篇文章主要介紹了
PAT甲级1085 Perfect Sequence :[C++题解]双指针
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 題目分析
- 題目來源
題目分析
來源:acwing
分析:求滿足條件M≤m×pM \leq m\times pM≤m×p的區間[m, M]最長是多少。此處有一性質:當最大值M變大的時候,最小值m也是變大的, 它不可能變小。根據這個性質便可以是使用雙指針算法:先從小到大枚舉最大值M,然后最小值m也是單調增加的。
ac代碼
#include<bits/stdc++.h> using namespace std; const int N = 1e5+10; typedef long long LL; int n ,p; int a[N];int main(){cin >> n >> p;int cnt = -1;for(int i = 0; i< n; i++) cin>> a[i];sort(a,a+n);//i是最大值,j是最小值for(int i = 0, j = 0; i< n; i++){while((LL) a[j]* p <a[i]) j++;cnt = max( cnt, i - j +1);}cout<<cnt<<endl;}題目來源
PAT甲級1085 Perfect Sequence
https://www.acwing.com/problem/content/1573/
總結
以上是生活随笔為你收集整理的PAT甲级1085 Perfect Sequence :[C++题解]双指针的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PAT甲级1046 Shortest D
- 下一篇: PAT甲级1051 Pop Sequen