首页 > 代码库 > codeforces 499A.Inna and Pink Pony 解题报告

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 部电影的最少观看时间。观看一部电影表示 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_JUDGE10         freopen("in.txt", "r", stdin);11     #endif // ONLINE_JUDGE12 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             else30                 cur_mom = l;31             ans += r - cur_mom + 1;32             cur_mom = r+1;33         }34         printf("%d\n", ans);35     }36     return 0;37 }

 

  

codeforces 499A.Inna and Pink Pony 解题报告