https://codeforces.com/contest/1283/problem/E
Meaning of the questions: n individual is located on the 1-n coordinates, everyone can step to the right or to the left or does not move. Coordinate range is 0-n + 1.
Ask these people can occupy a minimum number of coordinate, the maximum number of coordinates can be occupied.
Solution: Minimum:. I, i + 1, i + 2 persons coordinate on the i + 1 can be gathered up.
Up: coordinates on the human individual is greater than 1 is dispersed to the sides apart.
//#include <bits/stdc++.h> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <iostream> #include <cstdio> #include <string> #include <stdio.h> #include <queue> #include <stack> #include <map> #include <set> #include <string.h> #include <vector> #define ME(x , y) memset(x , y , sizeof(x)) #define SF(n) scanf("%d" , &n) #define rep(i , n) for(int i = 0 ; i < n ; i ++) #define INF 0x3f3f3f3f #define mod 1000000007 #define PI acos(-1) using namespace std; typedef long long ll ; int a[200009]; int main() { int n ; scanf("%d" , &n); for(int i = 0 ; i < n ; i++) { int x ; scanf("%d" , &x); ++a[x] ; } int mi = 0 , ma = 0; for(int i = 1 ; i <= n ;) { if(a[i]) i += 3 , mi++; else i++; } for(int i = 1 ; i <= n ; i++) { if(a[i] > 1) a[i]-- , a[i+1]++ ; } for(int i = n ; i >= 1 ; i--) { if(a[i] > 1) a[i]-- , a[i-1]++; } for(int i = 0 ; i <= n + 1 ; i ++) { if(a[i]) ma++; } cout << mi << " " << ma << endl; return 0 ; }