码迷,mamicode.com
首页 > 其他好文 > 详细

uvalive3971(二分)

时间:2017-04-17 23:39:51      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:string   char   int   blank   scanf   else   ring   sum   clu   

题目连接:https://vjudge.net/problem/UVALive-3971

 1 #include<cstdio>
 2 #include<string>
 3 #include<vector>
 4 #include<map>
 5 using namespace std;
 6 const int maxn=1010;
 7 int n,b;
 8 
 9 int cnt;
10 map<string,int> id;
11 struct node
12 {
13     int p,q;
14 };
15 vector<node> cat[maxn];
16 int ID(string s)
17 {
18     if(!id.count(s)) id[s]=cnt++;
19     return id[s];
20 }
21 bool ok(int rq)
22 {
23     int sum=0;
24     for(int i=0;i<cnt;i++)
25     {
26         int cheapest=b+1,m=cat[i].size();
27         for(int j=0;j<m;j++)
28             if(cat[i][j].q>=rq) cheapest=min(cheapest,cat[i][j].p);
29         if(cheapest==b+1) return 0;
30         sum+=cheapest;
31         if(sum>b) return 0;
32     }
33     return 1;
34 }
35 
36 int main()
37 {
38     int t;
39     scanf("%d",&t);
40     while(t--)
41     {
42         scanf("%d%d",&n,&b);
43         cnt=0;
44         for(int i=0;i<n;i++) cat[i].clear();
45         id.clear();
46         int maxq=0;
47         for(int i=0;i<n;i++)
48         {
49             char type[30],name[30];
50             int p,q;
51             scanf("%s%s%d%d",type,name,&p,&q);
52             maxq=max(maxq,q);
53             cat[ID(type)].push_back(node{p,q});
54         }
55         int L=0,R=maxq;
56         while(L<R)   //
57         {
58             int M=L+(R-L+1)/2;
59             if(ok(M)) L=M;
60             else R=M-1;
61         }
62         printf("%d\n",L);
63     }
64 
65 }

 

uvalive3971(二分)

标签:string   char   int   blank   scanf   else   ring   sum   clu   

原文地址:http://www.cnblogs.com/yijiull/p/6725641.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!