首页 > 其他 > 详细

codeforces B. Eugeny and Play List 解题报告

时间:2014-01-30 00:49:56      阅读:365      评论:0      收藏:0      [点我收藏+]

题目链接:http://codeforces.com/problemset/problem/302/B

题目意思:给出两个整数n和m,接下来n行给出n首歌分别的奏唱时间和听的次数,紧跟着给出m个时刻,需要对每个时刻输出该时刻正在弹奏哪一首歌曲。

      解题关键是每个时刻v有着这样的规律vi?<?vi?+?1 (i?<?m),即询问的时刻是递增的!因此可以先存储每一首歌的总占时间:c*v。接着对于第一个给定的时刻,可以从第一首歌开始统计,直到超过询问的时刻。由于递增,因此下一首歌不需要从头开始再算,只需要从上一次的统计时间继续相加即可。

      至于二分法也可以解决......本人较笨,只会用暴力......

     

bubuko.com,布布扣
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 using namespace std;
 5 
 6 const int maxn = 1e5 + 5;
 7 __int64 song[maxn], c, t, v, cnt;
 8 
 9 int main()
10 {
11     int n, m, i, j; 
12     while (scanf("%d%d", &n, &m) != EOF)  
13     {
14         for (i = 1; i <= n; i++)
15         {
16             scanf("%I64d%I64d", &c, &t);   // c,t最大为1e9,需要64位整型
17             song[i] = c * t;
18         }
19         cnt = 0;
20         for (j = i = 1; i <= m; i++)
21         {
22             scanf("%I64d", &v);
23             while (cnt < v && j <= n)
24                 cnt += song[j++];
25             printf("%d\n", j-1);     
26         }   
27     }
28     return 0;
29 } 
bubuko.com,布布扣

codeforces B. Eugeny and Play List 解题报告

原文:http://www.cnblogs.com/windysai/p/3536236.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!