zoukankan      html  css  js  c++  java
  • codeforces 499A.Inna and Pink Pony 解题报告

    题目链接:http://codeforces.com/problemset/problem/499/A

    题目意思:有两种按钮:1、如果当前观看的时间是 t,player 可以自动处理下一分钟,姑且理解为跳到t+1;  2、直接跳过 x 分钟,如果player在第 t 分钟,则可以跳到 t+x 分钟。问恰好可以看完 n 部电影的最少观看时间。观看一部电影(假如为第 i 部,起始时间为 li, 结束时间为 ri)表示 li, li+1, li+2, ..., ri-1, ri 的时间都要覆盖到。

      一开始做的时候想得太简单了,确实需要将每部电影的所有时间都覆盖到,但是要考虑到,如果不能恰好到达 li 这个时间点的话,意味着要在 li 之前的某个点就要开始覆盖,直到 ri。

      我的做法是用一个cur_mom来记录看下一部电影前的到达时间。初始的时候是 1(题目说的)。问题是如何确定可以恰好到达 li。这里可以通过比较 li - cur_mom 是否能被 x 整除来判断。有余数的话代表不能恰好到达。处理完一部电影之后要更新cur_mom,它等于这部电影的结束时间 +1。

      

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cstring>
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     #ifndef ONLINE_JUDGE
    10         freopen("in.txt", "r", stdin);
    11     #endif // ONLINE_JUDGE
    12 
    13     int n, x;
    14     while (scanf("%d%d", &n, &x) != EOF)
    15     {
    16         int l, r;
    17         int ans = 0;
    18         int cur_mom = 1;
    19 
    20         for (int i = 0; i < n; i++)
    21         {
    22             scanf("%d%d", &l, &r);
    23             if ((l-cur_mom) % x)
    24             {
    25                 int tmp = l - cur_mom;
    26                 int num = tmp / x;
    27                 cur_mom += num * x;
    28             }
    29             else
    30                 cur_mom = l;
    31             ans += r - cur_mom + 1;
    32             cur_mom = r+1;
    33         }
    34         printf("%d
    ", ans);
    35     }
    36     return 0;
    37 }

      

  • 相关阅读:
    ADO.NET 六(DataRow DataColumn)
    ADO.NET 五(DataAdapter 与 DataSet)
    ADO.NET 四(DataReader)
    ADO.NET 三(Command)
    ADO.NET 二(Connection)
    面试知识点笔记-1
    【新弹性盒】
    设置弹性盒要用到的属性
    Vue项目模板--和--webpack自动化构建工具的---项目打包压缩使用
    Vue中使用【watch检测路由】的方法
  • 原文地址:https://www.cnblogs.com/windysai/p/4187864.html
Copyright © 2011-2022 走看看