今天,該公司有m項任務要完成。第一項任務需要11分鐘才能完成。同時,此任務的難度等級為yi。級別低于此任務yi級別的機器無法完成此任務。如果公司完成此任務,他們將獲得(500xi + 2yi)美元。
該公司有n臺機器。每臺機器都有一個最大的作業時間和一個級別。如果任務時間超過計算機的最大作業時間,則計算機將無法完成此任務。每臺機器一天只能完成一項任務。每個任務只能由一臺機器完成。
該公司希望最大限度地增加他們今天可以完成的任務數量。如果有多種解決方案,他們希望最大程度地賺錢。
輸入格式:
輸入包含幾個測驗用例。
第一行包含兩個整數N和M.N是機器數.M是任務數(1 <= N <= 100000,1 <= M <= 100000)。
接下來的N行每行包含兩個整數xi(0 <xi <1440),yi(0 = <yi <= 100).xi是機器可以作業的最長時間.yi是機器的級別。
接下來的M行每行包含兩個整數xi(0 <xi <1440),yi(0 = <yi <= 100).xi是完成任務所需的時間.yi是任務的級別。
輸出格式:
對于每個測驗用例,輸出兩個整數,該公司今天可以完成的最大任務數以及將獲得的金錢。
#include <iostream>
#include<algorithm>
using namespace std;
struct node
{
int x,y;
}s1[100005],s2[100005];
int cmp(node a,node b)
{
if(a.x == b.x)
return a.y>b.y;
return a.x>b.x;
}
int main(){
int n,m,i,j,num,l,q,t,p;
long long money;
cin>>n>>m;
for(i = 0; i<n; i++){
scanf("%d%d",&s1[i].x,&s1[i].y);
}
for(i = 0; i<m; i++){
scanf("%d%d",&s2[i].x,&s2[i].y);
}
sort(s1,s1+n,cmp);
sort(s2,s2+m,cmp);
money=0;
for( i=0;i<m;i++){
for( j=0;j<n;j++){
if(s2[i].x<=s1[j].x&&s2[i].y<=s1[j].y){
t=s1[j].x;
p=s1[j].y;
q=j;
}
}
if(t>0){
s1[q].x=0;
s1[q].y=0;
t=0;
p=0;
money=500*s2[i].x+2*s2[i].y+money;
num++;
}
}
cout<<num<<" "<<money<<endl;
}
為什么一個測驗都通過不了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/63067.html
標籤:C++ 語言
上一篇:C++靜態順序表的定義和基本操作
