↓ 跳过正文
  1. Posts/

whust 2016 #1 D Zhenya moves from the dormitory (贪心,模拟)

·491 字·1 分钟

题目链接 傻逼模拟。。读完题就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		{
132
133		    printf("You should rent the apartment #%d with the friend #%d.\n",ans[1].rid,ans[1].fid);
134
135		}
136	    }
137	}
138  #ifndef ONLINE_JUDGE
139  fclose(stdin);
140  #endif
141    return 0;
142}

相关文章

codeforces 158 B. Taxi

·419 字·1 分钟
http://codeforces.com/problemset/problem/158/B 题意:n组人,每组有si个(1<=si<=4),每辆车能装4个人。问最少需要多少辆车装下所有人并且保证同一组的人在一辆车里。 思路:统计人数分别为1,2,3,4的人数。对于4的直接加到答案。贪心的思路是:优先用人数少的去填人数多的。

whust 2016 warm up E||codeforces 689 A. Mike and Cellphone (模拟)

·510 字·2 分钟
cf689A 思路:一个老式的电话键盘。。。。给出一个拨号的移动路径。。。问这个路径是否唯一。 思路:如果唯一就说明。。。不能平移。。。否则不唯一。。 平移可以上下左右。。所以先写4个常亮数组。。。标记平移后的结果。。。设置不合法位就可以了。。。

BZOJ 1689: [Usaco2005 Open] Muddy roads 泥泞的路 (模拟)

·785 字·2 分钟
1689: [Usaco2005 Open] Muddy roads 泥泞的路 # Time Limit: 5 Sec Memory Limit: 64 MB Submit: 311 Solved: 227 [Submit][Status][Discuss] Description # Farmer John has a problem: the dirt road from his farm to town has suffered in the recent rainstorms and now contains (1 <= N <= 10,000) mud pools. Farmer John has a collection of wooden planks of length L that he can use to bridge these mud pools. He can overlap planks and the ends do not need to be anchored on the ground. However, he must cover each pool completely. Given the mud pools, help FJ figure out the minimum number of planks he needs in order to completely cover all the mud pools.

BZOJ 1640/1692 : [Usaco2007 Nov]Best Cow Line 队列变换 (贪心)

·1568 字·4 分钟
1640: [Usaco2007 Nov]Best Cow Line 队列变换 # Time Limit: 5 Sec Memory Limit: 64 MB Submit: 710 Solved: 373 [Submit][Status][Discuss] Description # FJ打算带着他可爱的N (1 ≤ N ≤ 2,000)头奶牛去参加“年度最佳老农”的比赛。在比赛中,每个农夫把他的奶牛排成一列,然后准备经过评委检验。比赛中简单地将奶牛的名字缩写为其头字母(the initial letter of every cow),举个例子,FJ带了Bessie, Sylvia,和Dora,那么就可以缩写为BSD. FJ只需将奶牛的一个序列重新排列,然后参加比赛。他可以让序列中的第一头奶牛,或者最后一头走出来,站到新队列的队尾。利欲熏心的FJ为了取得冠军,他就必须使新队列的字典序尽量小。给你初始奶牛序列(用头字母)表示,然后按照上述的规则组成新序列,并使新序列的字典序尽量小。

BZOJ 1634: [Usaco2007 Jan]Protecting the Flowers 护花(贪心)

·864 字·2 分钟
1634: [Usaco2007 Jan]Protecting the Flowers 护花 # Time Limit: 5 Sec Memory Limit: 64 MB Submit: 605 Solved: 383 [Submit][Status][Discuss] Description # Farmer John went to cut some wood and left N (2 <= N <= 100,000) cows eating the grass, as usual. When he returned, he found to his horror that the cows were in his garden eating his beautiful flowers. Wanting to minimize the subsequent damage, FJ decided to take immediate action and transport the cows back to their barn. Each cow i is at a location that is Ti minutes (1 <= Ti <= 2,000,000) away from the barn. Furthermore, while waiting for transport, she destroys Di (1 <= Di <= 100) flowers per minute. No matter how hard he tries,FJ can only transport one cow at a time back to the barn. Moving cow i to the barn requires 2*Ti minutes (Ti to get there and Ti to return). Write a program to determine the order in which FJ should pick up the cows so that the total number of flowers destroyed is minimized.