Codeforces 508C - Anya and Ghosts (模拟 + 贪心)

题意

Anya因为很喜欢看鬼片,所以鬼要来她家做客。

每个鬼到来的时候必须要有k根蜡烛亮着。

Anya点亮一根蜡烛要一秒,每根蜡烛持续m秒

问她最少要几根蜡烛

思路

首先判断能不能成功。

显然当蜡烛的持续时间last小于最少要点亮的蜡烛数least时,不能成功。

然后就是模拟了。

我们不能浪费蜡烛,所以要从鬼来的前一秒开始点。

用队列表示现在点亮的蜡烛数。如果鬼来的时候蜡烛不够了,就push。

(为啥我看到蜡烛就想到了皮鞭。。)

代码

  
  
  
  
  1. priority_queue<int, vector<int>, greater<int> >Q;
  2. int main()
  3. {
  4. //ROP;
  5. int n, last, least;
  6. scanf("%d%d%d", &n, &last, &least);
  7. if (last < least)
  8. {
  9. puts("-1");
  10. return 0;
  11. }
  12. int fir, ans = 0;
  13. for (int i = 0; i < n; i++)
  14. {
  15. int tme;
  16. scanf("%d", &tme);
  17. while (!Q.empty() && Q.top() < tme) Q.pop();
  18. if (SZ(Q) < least)
  19. {
  20. int tmp = SZ(Q);
  21. for (int j = tme - 1, cnt = 0; cnt < least - tmp; cnt++, j--)
  22. {
  23. Q.push(j + last);
  24. ans++;
  25. }
  26. }
  27. }
  28. printf("%d\n", ans);
  29. return 0;
  30. }

你可能感兴趣的:(ACM,codeforces)