1. 程式人生 > >CodeForce-762B USB vs. PS/2(貪心)

CodeForce-762B USB vs. PS/2(貪心)

超時 b+ iostream target stack mit ack pan codeforce

USB vs. PS/2

CodeForces - 762B

題意:有三種電腦,分別有a、b、c個,第一種只有USB接口,第二種只有PS/2接口,第三種有兩種接口,有m個鼠標,告訴你價錢和接口類型,問最多有多少電腦和鼠標可以配對,這些鼠標最少花多少錢。

Input

2 1 1
4
5 USB
6 PS/2
3 PS/2
7 PS/2
Output
3 14

解題思路:將兩種鼠標分類後根據價錢來排序,先處理只有USB和只有PS/2接口的,然後兩種鼠標取價錢少的來處理既有USB又有PS/2接口的

#include <iostream>
#include <cstdio>
#include <string
> #include <cstring> #include <algorithm> #include <cmath> #include <queue> #include <vector> #include <set> #include <stack> #include <map> #include <climits> using namespace std; #define LL long long int a,b,c; int m; LL x1[300009],x2[300009]; int
main() { while(~scanf("%d %d %d",&a,&b,&c)) {//讀取數據過多,cin超時 int sum1=0,sum2=0; memset(x1,0,sizeof x1); memset(x2,0,sizeof x2); LL q,ans=0; string p; scanf("%d",&m); while(m--) { cin>>q>>p;
if(p=="USB") x1[sum1++]=q; else x2[sum2++]=q; } sort(x1,x1+sum1); sort(x2,x2+sum2); int aa=min(a,sum1),bb=min(b,sum2),sum=aa+bb,k=0; while(k<c) { if(aa<sum1&&bb<sum2&&x1[aa]<x2[bb]) aa++; else if(aa<sum1&&bb<sum2) bb++; else if(aa<sum1) aa++; else if(bb<sum2) bb++; else break; sum++; k++; } for(int i=0;i<aa;i++) ans+=x1[i]; for(int i=0;i<bb;i++) ans+=x2[i]; printf("%d %lld\n",sum,ans); } return 0; }


CodeForce-762B USB vs. PS/2(貪心)