题意翻译
题目描述
高桥烦恼着怎样按顺序卖章鱼烧。因为知道做了的章鱼烧不好吃,所以高桥不想卖那样的章鱼烧,但是只卖刚做好的话,卖的章鱼烧的数量减少了。 另外,高桥君认为,光让客人等的话,客人会逐渐离开的。 于是,他就把在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;
}