2015 ACM/ICPC Asia Regional Shanghai Online

A Sweet Journey

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 2619    Accepted Submission(s): 1007


Problem Description
Master Di plans to take his girlfriend for a travel by bike. Their journey, which can be seen as a line segment of length L, is a road of swamps and flats. In the swamp, it takes A point strengths per meter for Master Di to ride; In the flats, Master Di will regain B point strengths per meter when riding. Master Di wonders:In the beginning, he needs to prepare how much minimum strengths. (Except riding all the time,Master Di has no other choice)

 

Input
In the first line there is an integer t ( 1t50 ), indicating the number of test cases.
For each test case:
The first line contains four integers, n, A, B, L.
Next n lines, each line contains two integers: Li,Ri , which represents the interval [Li,Ri] is swamp.
1n100,1L105,1A10,1B101Li<RiL .
Make sure intervals are not overlapped which means Ri<Li+1 for each i ( 1i<n ).
Others are all flats except the swamps.
 

Output
For each text case:
Please output “Case #k: answer”(without quotes) one line, where k means the case number counting from 1, and the answer is his minimum strengths in the beginning.
 

Sample Input
  
  
1 2 2 2 5 1 2 3 4
 

Sample Output
  
  
Case #1: 0
 
#include <iostream>
#include <string>
#include <stdlib.h>
#include <ctype.h>
#include <cstdio>
#include <cstdlib>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <cstring>
#include <math.h>
#include <algorithm>
#define LL long long
#define INF 0x3f3f3f3f
#define RR freopen("in.txt","r",stdin)
#define WW freopen("out.txt","w",stdout)
#define PI acos(-1.0)

using namespace std;

struct node
{
    int ll, rr;
    bool operator<(const node &dd)const
    {
        return ll<dd.ll;
    }
} q[110];


int ls[100010];
int main()
{
    int T;
    scanf("%d",&T);
    int cnt=1;
    int n, a, b, len;
    int i, j;
    while(T--)
    {
        scanf("%d %d %d %d", &n, &a, &b, &len);
        for(int i=0;i<=len;i++)
            ls[i] = 0;
        for(i=0; i<n; i++)
        {
            scanf("%d %d", &q[i].ll, &q[i].rr );
            ls[ q[i].ll ] = q[i].rr;
        }

        int swam = 0;
        int flat = 0;
        int ans = 0;
        for(int i=0;i<len;i++)
        {
            if(ls[i] == 0)
            {
                flat += b;
            }
            else
            {
                int d = ls[i] - i;
                int tt = d * a;
                if(flat > tt)
                {
                    flat -= tt;
                }
                else
                {
                    ans += tt - flat;
                    flat = 0;
                }
                i = ls[i] - 1;
            }
        }
        printf("Case #%d: %d\n", cnt++, ans);

    }
    return 0;
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值