容易的網路遊戲
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; }