剛開始就是排好序按照從頭開始遍歷,結果我用腳趾頭想都超時了,果然一個三分的點超時了
后來細細想想,這種類型題目,大體都是哪些方法,什么輔助數組、雙指針
果然這題設置大小兩個動點,用輔助的數組記錄每個位置對應的最大子序列元素個數
#include<iostream>#include<algorithm>#include<vector>using namespace std;typedef long long LL; vector<LL> s;int main(){ LL n, p; cin>>n>>p; for(LL i = 0; i < n; i++){ LL temp; scanf("%lld",&temp); s.push_back(temp); } sort(s.begin(),s.end()); int minp = 0; int maxp = 0; int num[n] = {0}; while(maxp < s.size()){ if(s[maxp] <= s[minp] * p){ num[maxp] = maxp - minp + 1; maxp++; } else{ minp++; } } LL maxnum = 0; for(LL i = 0; i < n; i++){ if(maxnum < num[i]){ maxnum = num[i]; } } cout<<maxnum; return 0; }
新聞熱點
疑難解答