O Those Fads

 

题目描述

Like any other teenager, teen cows are occasionally overtaken by fads. Sometimes it's a hula hoop or a pet rock, other times it's Counterstrike, Pokemon, Rick Astley, or tribal tattoos on their udders.
Mathematically, we know that a fad has an initial attractiveness level L (1 <= L <= 50,000). Cow i has a resistance (0 <= Ri <= 1,000,000) that tells how long she can avoid a fad before having no alternative but to participate. When a fad's attractiveness level meets or exceeds a cow's fad resistance, then the cow will want to participate in the fad.
Each cow who participates in a fad increases (through peer pressure) that fad's attractiveness by some value K (1 <= K <= 2,500).
Given a population of N (1 <= N <= 100,000) cows, determine how many will participate in a fad.

输入描述:

* Line 1: Three space-separated integers: N, L, and K
* Lines 2..N+1: Line i+1 contains cow i's a single integer that is fad resistance: Ri

输出描述:

* Line 1: A single integer that is the number of cows how ultimately participate in the fad.

示例1

输入

复制

5 2 3
2
6
12
5
14

输出

复制

3

说明

Five cows with fad resistances 2, 6, 12, 5, and 14. Initial fad attractiveness is 2; peer pressure adds 3 for each attractiveness index for each cow that participates.
The initial attraction level of 2 brings in cow #1 (whose resistance is 2) and raises the attractiveness level to 5, thus attracting cow #4 (whose resistance is 5) and raising the attractiveness level to 8. This attracts cow #2 (resistance: 6) and raises the attractiveness level to 11. Neither cow #3 (resistance: 12) or cow #5 (resistance: 14) is sucked into the fad; a total of 3 cows particpate.

题意:给出n,l,k

n代表n头奶牛, 接下来会输入n行表示每头奶牛的抵抗值, l是初始诱惑值, 小于诱惑值的奶牛会

被加入集合, 导致l 增加 k, 问最终集合有几头奶牛。

样例 初始诱惑值2, 第一头奶牛被加入, I 增加为 5 第四头被加入, I 增加为8 , 第二头奶牛被加入

I 增加为11, 但是没有≤11的奶牛了, 所以答案为3

思路: 将奶牛排序, 每次二分查找能被新加入的位置减去之间已经加入的奶牛即新增加的奶牛数目ad,

然后I增加 ad * k。

#include 
using namespace std;
typedef long long ll;
#ifdef LOCAL
#define debug(x) cout << "[" __FUNCTION__ ": " #x " = " << (x) << "]\n"
#define TIME cout << "RuningTime: " << clock() << "ms\n", 0
#else
#define TIME 0
#endif
#define continue(x) { x; continue; }
#define break(x) { x; break; }
const int N = 1e5 + 10;
ll a[N];
int main(){
#ifdef LOCALfreopen("D:/input.txt", "r", stdin);
#endif ll n, l, k;cin >> n >> l >> k;for (int i = 1; i <= n; i++)scanf("%lld", &a[i]);sort(a + 1, a + 1 + n);ll ans = 0;ll cnt = 0;while (true){ll j = lower_bound(a + 1, a + 1 + n, l) - a;if (a[j] != l)  // 注意, 如果不等于, 即小于a[j], a[j] 就不能被加入了j--;ll ad = j - cnt; // 现在能被加入的if (!ad)   //不能再加了break;ans += ad;cnt = j;l += ad * k;	}cout << ans << endl;return TIME;
}

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部