Codeforces 847E - Packmen
Posted Wisdom+.+
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 847E - Packmen相关的知识,希望对你有一定的参考价值。
思路:二分时间。
代码:
#include<bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define mem(a,b) memset(a,b,sizeof(a)) int n; string s; bool check(int t) { int now=-1,bean=-2;//now是上一个P覆盖到的位置,bean是没有被上一个P覆盖到的第一个星星 for(int i=0;i<n;i++) { if(s[i]==‘*‘) { if(bean<=now)bean=i; } else if(s[i]==‘P‘) { if(now<bean) { if(i-bean>t)return false; else now=max((t-(i-bean))/2+i,bean+t-(i-bean));//P有两种走法,一种先往前再往后,另一种先往后再往前 } else { now=i+t; } } } return now>=bean; } int binasrh(int l,int r) { if(l==r)return l; int m=(l+r)>>1; if(check(m))binasrh(l,m); else binasrh(m+1,r); } int main() { ios::sync_with_stdio(false); cin.tie(0); cin>>n>>s; cout<<binasrh(0,1000000)<<endl; return 0; }
以上是关于Codeforces 847E - Packmen的主要内容,如果未能解决你的问题,请参考以下文章