P1007_独木桥
2017-08-10 16:51
204 查看
传送门
解题思想:仔细考虑会发现,两个人相遇无论转不转身两个人所走的 总路程 都是一样的,那么时间也都一样,所以我们大可让两个士兵相遇后继续直走。
代码实现:对于每一个士兵,只有向左或向右两种选择对吧。那么最大值也就是max(向左走所用时间,向右走所用时间),最小值也是一样。
注意:有一个细节要考虑到,因为每一个士兵是同时开始走,而不是一个一个走。所以max/min(向左走所走路程,向右走所走路程)还要在减去已经过去的时间,但是这有可能为负,也就是在这之前那个士兵已将走完,所以应该加0。
解题思想:仔细考虑会发现,两个人相遇无论转不转身两个人所走的 总路程 都是一样的,那么时间也都一样,所以我们大可让两个士兵相遇后继续直走。
代码实现:对于每一个士兵,只有向左或向右两种选择对吧。那么最大值也就是max(向左走所用时间,向右走所用时间),最小值也是一样。
注意:有一个细节要考虑到,因为每一个士兵是同时开始走,而不是一个一个走。所以max/min(向左走所走路程,向右走所走路程)还要在减去已经过去的时间,但是这有可能为负,也就是在这之前那个士兵已将走完,所以应该加0。
#include<cstdio> #include<cstdlib> #include<iostream> #include<algorithm> #include<ctime> #include<cstring> using namespace std; int maxn,minn; int main() { int n,l; scanf("%d%d",&l,&n); for(int i=1;i<=n;i++) { int a; scanf("%d",&a); maxn+=max(0,max(a,l-a+1)-maxn); minn+=max(0,min(a,l-a+1)-minn); } printf("%d %d",minn,maxn); return 0; }