#include <iostream>
//松雅旅店
#include <cmath>
using namespace std;
int main(){
int n=0,m=0,a=0,d=0,door=0;
cin>>n>>m>>a>>d;
int arr[m];
for(int i=0;i<m;i++){
cin>>arr[i]; //输入客人进入的时间
}
int time_max=0 ;
time_max=max(arr[m-1],n*a); //找出最大时间点
int line [time_max];
for(int i =0;i<time_max;i++){
line[i]=0; //把总时间线中的元素全搞为 0
}
for(int i =0;i<m;i++){
line[arr[i]-1]=1;
} //把有客人进入的时间线搞为1
for(int i=0;i<n;i++){
line [(i+1)*a-1] =1;
}
for(int i =0;i<time_max;i++){
if (line[i]==1){
door++;
i=i+d; //根据数组赋值是否为1来判断是否有人
}
}
cout<<door;
return 0;
}
思路简介
**本题难点在于怎么搞清楚客人和员工进来的区别,他们的交互会影响计时
其实你可以把时间拉成一条线 把客人和员工看成一个个因子,他们什么时候进入,就给这条线上打一个结,这样,就可以消除他们的相互影响
**
这样之后,就把人订住了,之后就考虑时间,因为题目是要输出们打开几次,所以你就先考虑第一次什么时候打开,也就是在这条时间线上第一次碰到1,然后就加上这个门开启的时间,中间无论有没有人进都不影响,等门关闭后又判断一次,以此类推,直到到达最大时间时结束 输出打开门次数