洛谷AT821 おいしいたこ焼きの売り方

题目传送门

题意翻译

题目描述

高桥烦恼着怎样按顺序卖章鱼烧。因为知道做了的章鱼烧不好吃,所以高桥不想卖那样的章鱼烧,但是只卖刚做好的话,卖的章鱼烧的数量减少了。 另外,高桥君认为,光让客人等的话,客人会逐渐离开的。 于是,他就把在T秒内制作的章鱼烧继续卖下去,就决定调查客人是否能卖掉。 章鱼烧是A1、A2、…、AN秒后开始烤。 客人是B1、B2、…、在BM秒后来。 对于一个客人,卖一个章鱼烧。如果所有的客人都卖章鱼烧的话,请输出yes,如果卖不出去的话,请输出no。

输入输出格式

输入格式:

输出格式:

如果所有的客人都会卖章鱼烧的话,请输出yes,如果卖不出去的话,请输出no。 另外,请在输出的末尾加入换行。

输入输出样例

输入 #1

1
3
1 2 3
3
2 3 4

输出 #1

yes

输入 #2

1
3
1 2 3
3
2 3 5

输出 #2

no

输入 #3

1
3
1 2 3
10
1 2 3 4 5 6 7 8 9 10

输出 #3

no

输入 #4

1
3
1 2 3
3
1 2 2

输出 #4

no

输入 #5

2
5
1 3 6 10 15
3
4 8 16

说明

Sample Explanation 1

-每一个客人都买了一秒前做成的章鱼烧,可以给所有的客人卖章鱼烧。

Sample Explanation 2

-不能卖给最后的客人章鱼烧。

Sample Explanation 3

-高桥君的章鱼烧店很受欢迎。

Sample Explanation 4

-让第三位客人久等了。

思路:(见下方代码)

#include<bits/stdc++.h>
using namespace std;
int t,n,m,a[100010],b[100010],now=1;//now用来记录当前卖哪一个章鱼烧
bool f[1000010];//记录第i个章鱼烧是否用过
int main() {
	cin>>t>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	cin>>m;
	for(int i=1;i<=m;i++) cin>>b[i];
	sort(a+1,a+n+1);
	sort(b+1,b+m+1);
	if(n<m) {//客人数量大于章鱼烧数量
		cout<<"no"<<endl;//没这么多货
		return 0;
	}
	for(int i=1;i<=m;i++) {
		bool flag=false;
		for(int j=now;j<=n;j++) {
			if(!f[j]&&a[j]<=b[i]&&a[j]+t>=b[i]) {//如果能卖
				f[j]=1;//此章鱼烧已用
				flag=1;//这个客人有章鱼烧吃
				now=j+1;//之前的肯定都不会被后面的客人买了,不然这个客人为什么要选这一个呢
				break;//任务完成了,每个客人只需要一个章鱼烧
			}
		}
		if(!flag) {//如果没卖出去(被投诉了...)
			cout<<"no"<<endl;//(开除...)
			return 0;
		}
	}
	cout<<"yes"<<endl;//终于可以受老板嘉奖喽

    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值