标签:sort scanf iostream ret .net define ios memset ack
题意:有三种电脑,分别有a、b、c个,第一种只有USB接口,第二种只有PS/2接口,第三种有两种接口,有m个鼠标,告诉你价钱和接口类型,问最多有多少电脑和鼠标可以配对,这些鼠标最少花多少钱。
Input
2 1 1
4
5 USB
6 PS/2
3 PS/2
7 PS/2
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(贪心)
标签:sort scanf iostream ret .net define ios memset ack
原文地址:http://www.cnblogs.com/YingZhixin/p/7106478.html