• codeforces B. Eugeny and Play List 解题报告


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

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

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

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

         

     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
    ", j-1);     
    26         }   
    27     }
    28     return 0;
    29 } 
  • 相关阅读:
    小记2_finddata_t结构体
    小记1
    2014-1-2 笔记
    _RecordsetPtr的 open函数
    SAFEARRAY
    用VC实现特定编辑框上对回车键响应
    常用控件的常用消息
    单文档与多文档
    java中得到json格式的数据
    form表单验证时的onsubmit事件
  • 原文地址:https://www.cnblogs.com/windysai/p/3536236.html
Copyright © 2020-2023  润新知