标签:[1] ted cee uri any http font ant turn
The prison of your city has n prisoners. As the prison can‘t accommodate all of them, the city mayor has decided to transfer c of the prisoners to a prison located in another city.
For this reason, he made the n prisoners to stand in a line, with a number written on their chests. The number is the severity of the crime he/she has committed. The greater the number, the more severe his/her crime was.
Then, the mayor told you to choose the c prisoners, who will be transferred to the other prison. He also imposed two conditions. They are,
Find the number of ways you can choose the c prisoners.
The first line of input will contain three space separated integers n (1 ≤ n ≤ 2·105), t (0 ≤ t ≤ 109) and c (1 ≤ c ≤ n). The next line will contain n space separated integers, the ith integer is the severity ith prisoner‘s crime. The value of crime severities will be non-negative and will not exceed 109.
Print a single integer — the number of ways you can choose the c prisoners.
4 3 3
2 3 1 1
1 1 1
2
11 4 2
2 2 0 7 3 2 2 4 9 1 4
2
0
6
题解:
试了一发暴力,果断超时,后来想了下,我们只需要记录下超过t的数,然后根据相邻两次超过t的数的位置求得此段不超过t的最长区间,看看是否符合题意,然后就可以计算出有多少种方法了。
#include<bits/stdc++.h> using namespace std; const int maxn = 200005; int a[maxn], pos[maxn] = {0}; int main() { int n, t, c, p = 1, res = 0; scanf("%d%d%d", &n, &t, &c); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); if (a[i] > t) pos[p++] = i; } pos[p++] = n + 1; if (pos[1] == 0) res += 1 + (n - c); else { for (int i = 1; i < p; i++) { int len = pos[i] - pos[i - 1] - 1; if (len >= c) { res += 1 + (len - c); } } } printf("%d\n", res); return 0; }
Codeforces Round #244 (Div. 2)B. Prison Transfer(想法题)
标签:[1] ted cee uri any http font ant turn
原文地址:http://www.cnblogs.com/zzy19961112/p/6790781.html