1. 程式人生 > >容易的網路遊戲

容易的網路遊戲

Description

現在網路遊戲一款接一款地推出,佳佳和他的同學們也迷上了網路遊戲。他們最近在玩N款不同的網路遊戲。
  一些網路遊戲允許玩家購買雙倍經驗卡。擁有雙倍經驗卡的玩家可以在有效期內獲得更多的經驗值。佳佳和他的同學們有著豐富的網遊經驗,對於任何一款網路遊戲,只要是在雙倍經驗的條件下,無論誰玩都可以在單位時間內輕鬆獲得一個單位的經驗值。
  國慶節馬上到了,網遊公司不會錯過這難得的機會大撈一把。中國網遊常用的賺錢手段便是免費提供雙倍經驗(因為如果玩家再買一張雙倍卡,便可獲得4倍經驗)。
  在9、10、11月份,佳佳和他的同學們玩的N個網路遊戲中每一個都會有一段開放免費雙倍經驗的時間。佳佳事先作了調查,他已經把每一款網遊的雙倍經驗開放時間都記了下來。佳佳是不會亂用自己的零花錢購買雙倍經驗卡的,他決定在免費雙倍經驗時叫同學到家裡一起玩;同時,他們也不會浪費自己的時間,為了提高效率,他們只玩處於免費雙倍經驗開放時期的遊戲。
  我們假定,每臺電腦最多隻能有一人操作,一個人最多隻能操作一臺電腦;並且每款遊戲最多隻能在一臺電腦上玩,每臺電腦最多執行一個遊戲。我們忽略開始遊戲和結束遊戲時所消耗的時間。
  現在佳佳想知道,假如佳佳共有M臺電腦,且佳佳一共叫來了P個同學,那麼他和他的同學們最多能得到多少單位的經驗呢?

Input

第一行有三個用空格隔開的整數N,M和P,它們表示的意義如題目描述。
  以下N行,每行有兩個用空格隔開的整數Xi,Yi(Xi<=Yi),表示從Xi單位時間到Yi單位時間為第i款遊戲開放雙倍經驗的時間。

對於70%資料,0<=Xi,Yi<=10000;
  對於100%資料,0<=Xi,Yi<=5000000,0<=P<=2147483647,1<=N<=1000,1<=M<=1000。

Output

一個整數,表示佳佳和他的同學們能獲得的最大經驗值。

Sample Input

1 1 1
0 100

Sample Output

101


程式

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;

long long p,n,m,k,ans;

struct node{
    long long x;
    bool y;
}a[2001];

bool cmp(node l,node r){
    return l.x<r.x;
}

int main(){
	cin>>n>>m>>p;
	m=min(m,p+1);
	for (int i=1;i<=n;i++){
		cin>>a[2*i-1].x>>a[2*i].x;
		a[2*i].x++;
		a[2*i-1].y=0;
		a[2*i].y=1;
	}
	sort(a+1,a+2*n+1,cmp);
	for (int i=1;i<=2*n;i++){
		long long w=min(m,k);
		ans=ans+(a[i].x-a[i-1].x)*w;
        if (a[i].y) k--;
        	else k++;
	}
	cout<<ans<<endl;
	return 0;
}