NC235294. 任务
描述
输入描述
第一行包含两个整数和。其中是机器的数量,为任务数。
下面N行每行分别包含两个整数是机器能工作的最大时间。是机器的等级。
下面的行分别包含两个整数是任务所需要的工作时间。是任务的等级。
输出描述
输出两个整数,公司今天能完成任务的最大数量和此情况下公司能得到的最大报酬。
示例1
输入:
1 2 100 3 100 2 100 1
输出:
1 50004
C++(g++ 7.5.0) 解法, 执行用时: 144ms, 内存消耗: 5880K, 提交时间: 2022-08-21 21:48:39
#include<bits/stdc++.h> using namespace std; struct aa{ int x,y; }a[100005],b[100005]; bool cmp(aa x,aa y){ if(x.x==y.x)return x.y>y.y; else return x.x>y.x; } int main() { int n,m; cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i].x>>a[i].y; for(int i=1;i<=m;i++) cin>>b[i].x>>b[i].y; sort(a+1,a+n+1,cmp); sort(b+1,b+m+1,cmp); multiset<int>ss; int j=1; long long ans=0; int num=0; for(int i=1;i<=m;i++) { while(j<=n&&a[j].x>=b[i].x) { ss.insert(a[j].y); j++; } auto it=ss.lower_bound(b[i].y); if(it!=ss.end()) { ans+=500*b[i].x+2*b[i].y; num++; ss.erase(it); } } cout<<num<<" "<<ans; }
C++(clang++ 11.0.1) 解法, 执行用时: 126ms, 内存消耗: 5896K, 提交时间: 2023-07-08 19:52:15
#include <bits/stdc++.h> using namespace std; typedef struct ma { int x, y; bool operator< (const ma &p) const { return x==p.x?y>p.y:x>p.x;} } ma; int main() { int n, m; cin >> n >> m; ma a[n], b[m]; for(int i=0;i<n;i++) cin >> a[i].x >> a[i].y; for(int i=0;i<m;i++) cin >> b[i].x >> b[i].y; sort(a, a+n); sort(b, b+m); multiset<int> ms; long long cnt = 0, ans = 0; for(int i=0,j=0;i<m;i++) { while(j<n&&b[i].x<=a[j].x) ms.insert(a[j++].y); auto it = ms.lower_bound(b[i].y); if(it!=ms.end()) cnt++, ans += 500*b[i].x + 2*b[i].y, ms.erase(it); } cout << cnt << ' ' << ans << endl; }