哈尔滨理工大学软件与微电子学院程序设计竞赛(同步赛) L.Defeat the monster (尺取)
-
题意:从一个数组中尽可能多的选数,要求所选的每个数之间的差不大于\(5\).
-
题解:先排序,然后双指针尺取,如果能取,则移动右指针,维护最大值,否则移动左指针即可.
-
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <stack> #include <queue> #include <vector> #include <map> #include <set> #include <unordered_set> #include <unordered_map> #define ll long long #define fi first #define se second #define pb push_back #define me memset const int N = 1e6 + 10; const int mod = 1e9 + 7; const int INF = 0x3f3f3f3f; using namespace std; typedef pair<int,int> PII; typedef pair<ll,ll> PLL; int n; int a[N]; int main() { ios::sync_with_stdio(false);cin.tie(0); cin>>n; for(int i=1;i<=n;++i){ cin>>a[i]; } sort(a+1,a+1+n); int l=1,r=2; int ans=0; while(r<=n){ if(a[r]-a[l]>5) l++; else{ r++; ans=max(ans,r-l); } } cout<<ans<<endl; return 0; }
𝓐𝓬𝓱𝓲𝓮𝓿𝓮𝓶𝓮𝓷𝓽 𝓹𝓻𝓸𝓿𝓲𝓭𝓮𝓼 𝓽𝓱𝓮 𝓸𝓷𝓵𝔂 𝓻𝓮𝓪𝓵
𝓹𝓵𝓮𝓪𝓼𝓾𝓻𝓮 𝓲𝓷 𝓵𝓲𝓯𝓮