1. 程式人生 > >容易的網路遊戲 [離散]

容易的網路遊戲 [離散]

題目

     

容易的網路遊戲(normal)

Time Limit:1000MS  Memory Limit:65536K
Total Submit:308 Accepted:107

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

     

分析

     離散化

    開long long

      時間記得加1

程式碼

 

 

   

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 long long  x1[200000],x2[200000],x[100000000
]; 5 long long flag[10000000]; 6 long long h=0; 7 int main () 8 { 9 long long n,m,p; 10 cin>>n>>m>>p; 11 p++; 12 m=min(m,p); 13 for (int i=1;i<=n;i++) 14 { 15 cin>>x1[i]>>x2[i]; 16 x[2*i-1]=x1[i]; 17 x[2*i]=x2[i]+1; 18 } 19 sort(x+1,x+1+2*n); 20 //int wz=unique(x+1,x+1+2*n)-x; 21 for (int i=1;i<=2*n;i++) 22 { 23 for (int j=1;j<=n;j++) 24 { 25 if (x[i]>=x1[j]&&x[i+1]<=x2[j]+1&&flag[i]<m) 26 flag[i]++; 27 } 28 } 29 for (int i=1;i<2*n;i++) 30 { 31 if (flag[i]!=0) 32 h+=(x[i+1]-x[i])*flag[i]; 33 } 34 cout<<h; 35 }