1 solutions
-
0
C :
#include <stdio.h> int Count(int arr[], int n) { int L = 0, R = 0, max = 0, min = 0, num = 0; for (L = 0; L < n; ++L) //先从[1-n],然后[2-n],[3-n],如此搜索... { max = -1, min = 50001; for (R = L; R < n; ++R) { if (max < arr[R]) //找出区间[L,R]之间的最大和最小值 max = arr[R]; if (min > arr[R]) min = arr[R]; if (max - min + 1 == R - L + 1) //判断是否为连号区间数 { // printf("[%d,%d]\n",L,R); //打印每种情况 ++num; } } } return num; } int main() { int arr[50000] = {0}, n = 0, i = 0; scanf("%d",&n); for (i = 0; i < n; ++i) scanf("%d",&arr[i]); printf("%d",Count(arr,n)); //打印连号区间数 return 0; }C++ :
#include<iostream> #include<algorithm> #include<cstring> #include<ctime> #include<cmath> #include<string> #include<cstdio> using namespace std; const int N = 50005; int a[N]; int main() { int n; scanf("%d", &n); for(int i = 0; i < n; ++i) scanf("%d", &a[i]); int ans = n; for(int i = 0; i < n; ++i) { int _max = a[i], _min = a[i]; for(int j = i + 1; j < n; ++j) { _max = max(_max, a[j]); _min = min(_min, a[j]); if(_max - _min == j - i) ++ans; } } printf("%d\n" ,ans); return 0; }
- 1
Information
- ID
- 16315
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By