1 solutions
-
0
首先将给的所有位置从小到大排序,假如两个位置之间距离小于等于2就可传递,先用fg标记第一个点,用后面一个数减去fg,假如小于等于2就将计数temp++,大于2就将temp归为1,循环着往前走fg也一直向前移动,再通过过程中的temp和min、max比较,得出最小和最大值。
#include<bits/stdc++.h> using namespace std; int main(){ int t; cin>>t; while(t--){ int n,max=1,min=100000000,j=0; cin>>n; int a[n+5]={0}; for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+n+1); int fg=a[1],temp=1; for(int i=2;i<=n;i++){ if(abs(a[i]-fg)<=2) temp++; else { if(temp<min)min=temp; if(temp>max)max=temp; temp=1; } fg=a[i]; } if(temp<min)min=temp; if(temp>max)max=temp; cout<<min<<" "<<max<<endl; } return 0; }
- 1
Information
- ID
- 153
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 7
- Tags
- # Submissions
- 48
- Accepted
- 12
- Uploaded By