【恶心的模拟 && 找时刻问题】CodeForces - 883A Automatic Door
2017-11-27 20:20
489 查看
Problem Description
给你n+m个人,n个人是雇员,m个人是客户,给了你他们每个人进来的时刻。n个人进来的时间分别为 c, 2*c, 3*c … n*c。m个人进来的时间直接给出。
他们进来的时候如果门是关的,门就会打开,然后他们通过。
如果他们进来的时候门是开的,他们就会通过。
门打开后持续时间d秒,才关门。
问你所有人通过,至少得打开门多少次。
思路:
由于n很大,我们需要在遍历m的过程中,处理好n。
对于每个客户进来的时刻,我们需要看在它之前进来了几个雇员,看它需要开几次门。最后一次开门能否,让客户也正好可以通过。
如果雇员已经进来完了,就只剩下客户了
如果客户已经进来完了,就只剩下雇员了
详细步骤看代码:注释的很清晰
给你n+m个人,n个人是雇员,m个人是客户,给了你他们每个人进来的时刻。n个人进来的时间分别为 c, 2*c, 3*c … n*c。m个人进来的时间直接给出。
他们进来的时候如果门是关的,门就会打开,然后他们通过。
如果他们进来的时候门是开的,他们就会通过。
门打开后持续时间d秒,才关门。
问你所有人通过,至少得打开门多少次。
思路:
由于n很大,我们需要在遍历m的过程中,处理好n。
对于每个客户进来的时刻,我们需要看在它之前进来了几个雇员,看它需要开几次门。最后一次开门能否,让客户也正好可以通过。
如果雇员已经进来完了,就只剩下客户了
如果客户已经进来完了,就只剩下雇员了
详细步骤看代码:注释的很清晰
#include<bits/stdc++.h> using namespace std; #define ll long long #define maxn 100055 ll a[maxn]; int main() { ll n, m, c, d; int i; while(~scanf("%lld %lld %lld %lld", &n, &m, &c, &d))//雇员个数, 客户个数, 雇员进来时间间隔, 门打开持续时间 { for(i = 0; i < m; i++) { scanf("%lld", &a[i]); } sort(a, a + m);//客户进来的时间 ll ans = 0; ll tt = d / c;//开一次门可以进 tt + 1个雇员 ll t1 = 1, t2, last = 0; ll k, num, r; for(i = 0; i < m;) { if(t1 <= n) //还有雇员没进来 { t2 = a[i]/c;//到a[i]这个时刻,进来了多少个雇员 if(t2 > n) t2 = n; k = t2 - t1 + 1;//上一个时刻到这一个时刻,进来了多少个雇员 if(k > 0) { ans += k/(tt+1);//需要开几次门 if(k%(tt+1) != 0) ans++;//还有余的雇员没进,需要多开一次门 num = k%(tt+1); if(num == 0) num = tt+1; r = t2 - num + 1;//求出开的最后一次门 是那个雇员第一个进 last = r*c + d;//门持续到的时刻 t1 = last/c + 1;//更新当前进了多少个雇员 } } if(last < a[i])//如果门持续时间,没能让客户进,打开门次数+1 { ans++; last = a[i] + d;//更新门持续时间 t1 = last / c + 1;//更新当前进了多少个雇员 } while(last >= a[i]) { i++; } } if(n >= t1)//客户进完了,还剩下雇员的情况 { ans += (n-t1+1) / (tt+1); if((n-t1+1)%(tt+1) != 0) ans++; } printf("%lld\n", ans); } return 0; }
相关文章推荐
- Codeforces 757F && NOIP2017 2017-09-28模拟T3
- exc_bad_access的错误,找不到<libxml/tree.h> 头文件,retina模拟器怎么缩小的问题,xcode5.1.1怎么运行6.1的模拟器,还有模拟器模拟location
- CodeForces - 659C Tanya and Toys (map&模拟)
- 【Codeforces 868 B. Race Against Time】& 模拟
- Codeforces 475C Kamal-ol-molk's Painting 模拟
- 概率DP种类问题 UVA - 10648 && CodeForces - 768D
- CodeForces - 670D2 Magic Powder - 2 (二分&模拟)
- #个人赛第七场解题总结# (FZU 1881三角形问题 找规律 &&FZU 1884 排火车 模拟)
- hdoj_5643 King's Game(约瑟夫环问题变种)----超时版本(自己模拟的循环链表)
- (hdu step 8.1.6)士兵队列训练问题(数据结构,简单模拟——第一次每2个去掉1个,第二次每3个去掉1个.知道队伍中的人数<=3,输出剩下的人 )
- 【CodeForces】508C - Anya and Ghosts(贪心 & 模拟)
- Codeforces Round #378 (Div. 2) C && Codeforces 733C (模拟)详解(两种写法)
- POJ1008 Maya Calendar(模拟)&&整除和取余的边界问题
- codeforces 792 C. 删除尽量少的位数后是3的倍数 (取余问题+分类讨论+模拟吧)
- <数据结构学习与实验指导>2-8用扑克牌计算24点/2-9装箱问题模拟
- CodeForces - 651A Joysticks (找规律&模拟)水
- Codeforces-707D:Persistent Bookcase (离线处理特殊的可持久化问题&&Bitset)
- CodeForces - 630M Turn (模拟&技巧) 水
- codeforces-3A-A. Winner (C++ && 简单模拟)
- 【CodeForces】223A - Bracket Sequence(栈 & 模拟)