whust 2016 #1 D Zhenya moves from the dormitory (贪心,模拟)
题目链接 傻逼模拟。。读完题就ac了。。。
1/* ***********************************************
2Author :111qqz
3Created Time :2016年08月07日 星期日 18时04分18秒
4File Name :code/whust2016/#1/D.cpp
5************************************************ */
6#include <cstdio>
7#include <cstring>
8#include <iostream>
9#include <algorithm>
10#include <vector>
11#include <queue>
12#include <stack>
13#include <set>
14#include <map>
15#include <string>
16#include <cmath>
17#include <cstdlib>
18#include <deque>
19#include <ctime>
20#define fst first
21#define sec second
22#define lson l,m,rt<<1
23#define rson m+1,r,rt<<1|1
24#define ms(a,x) memset(a,x,sizeof(a))
25typedef long long LL;
26#define pi pair < int ,int >
27#define MP make_pair
28using namespace std;
29const double eps = 1E-8;
30const int dx4[4]={1,0,0,-1};
31const int dy4[4]={0,-1,1,0};
32const int inf = 0x3f3f3f3f;
33const int N=280;
34int n,m;
35int total,adva,advb;
36struct Friend
37{
38 int money;
39 int adv;
40}f[N];
41struct Room
42{
43 int type;
44 int cost;
45 int adv;
46}r[N];
47struct Ans
48{
49 int val;
50 int rid;
51 int fid;
52 bool operator < (Ans b)const
53 {
54 return val>b.val;
55 }
56}ans[300*300];
57int main()
58{
59 #ifndef ONLINE_JUDGE
60 freopen("code/in.txt","r",stdin);
61 #endif
62 cin>>total>>adva>>advb;
63 cin>>n;
64 for ( int i = 1 ; i <= n ; i++)
65 scanf("%d %d",&f[i].money,&f[i].adv);
66 scanf("%d",&m);
67 for ( int i = 1 ; i <= m ; i++)
68 scanf("%d%d%d",&r[i].type,&r[i].cost,&r[i].adv);
69 int cnt = 0 ;
70 for ( int i = 1 ; i <= m ; i++)
71 {
72 if (r[i].type==1)
73 {
74 if (r[i].cost<=total)
75 {
76 cnt++;
77 ans[cnt].val = r[i].adv+adva;
78 ans[cnt].rid = i;
79 ans[cnt].fid = -1;
80 }
81 continue;
82 }
83 else
84 {
85 for ( int j = 0 ; j <= n ; j++)
86 {
87 if (j==0) //自己住双人间
88 {
89 if (r[i].cost<=total)
90 {
91 cnt++;
92 ans[cnt].val = r[i].adv+advb;
93 ans[cnt].rid = i ;
94 ans[cnt].fid = -1;
95 }
96 }
97 else
98 {
99 if (r[i].cost<=total*2&&r[i].cost<=f[j].money*2)
100 {
101 cnt++;
102 ans[cnt].val = r[i].adv+f[j].adv;
103 ans[cnt].rid = i ;
104 ans[cnt].fid = j;
105 }
106 }
107 }
108 }
109 }
110// for ( int i = 1 ; i <= cnt ; i++)
111// {
112// printf("val:%d room: %d friend : %d \n",ans[i].val,ans[i].rid,ans[i].fid);
113// }
114 if (cnt==0)
115 {
116 puts("Forget about apartments. Live in the dormitory.");
117 }else
118 {
119 sort(ans+1,ans+cnt+1);
120 if (r[ans[1].rid].type==1)
121 {
122 printf("You should rent the apartment #%d alone.\n",ans[1].rid);
123 }
124 else
125 {
126 if (ans[1].fid==-1)
127 {
128 printf("You should rent the apartment #%d alone.\n",ans[1].rid);
129 }
130 else
131 {
printf("You should rent the apartment #%d with the friend #%d.\n",ans[1].rid,ans[1].fid);
1 }
2 }
3 }
4 #ifndef ONLINE_JUDGE
5 fclose(stdin);
6 #endif
7 return 0;
8}