Codeforces Round #345 (Div. 1)B. Image Preview
Posted walfy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #345 (Div. 1)B. Image Preview相关的知识,希望对你有一定的参考价值。
题意:给一堆照片,只能左右翻(时间为a),如果看的时候不正,就旋转(时间为b),看的时间为1,不能跳过,看过的不用再看,求看到的最大照片数
题解:模拟+二分,先从左到右扫一遍,扫的同时反向进行二分,看最远能到达的地方是哪里,然后求看到的最大照片数,还要反向来一遍,先向后扫,然后向前二分
#include<bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define pii pair<int,int> #define C 0.5772156649 #define pi acos(-1.0) #define ll long long #define mod 2147493647 #define ls l,m,rt<<1 #define rs m+1,r,rt<<1|1 using namespace std; const double g=10.0,eps=1e-7; const int N=500000+10,maxn=60000+10,inf=0x3f3f3f3f; char s[N]; int suf[N],n; ll a,b,t; ll alltime(int x,int i) { if(x<i)return a*(i-x-1); else if(x>=i)return b*suf[n-x+i]+a*(x-1)+x-i+1; } int main() { ll ans=0; scanf("%lld%lld%lld%lld%s",&n,&a,&b,&t,s+1); for(int i=n;i>=1;i--) { if(s[i]==‘w‘)suf[i]=suf[i+1]+1; else suf[i]=suf[i+1]; } // printf("%lld\n",alltime(1,1)); // for(int i=1;i<=n;i++)printf("%d ",suf[i]); ll te=t; for(int i=1;i<=n;i++) { if(s[i]==‘w‘)te-=1+b; else te-=1; if(te<0)break; te-=a; int l=0,r=n; while(l<r-1) { int m=(l+r)/2; //printf("%lld %d %d %lld\n",t,m,i,alltime(m,i)); // printf("%d %d %d %lld\n",l,m,r,alltime(m,i)); if(alltime(m,i)>te)r=m; else l=m; } // printf("%lld %d %d\n",t,l,i); ans=max(ans,(ll)max((l+1),i)); } for(int i=2;i<=(n+2)/2;i++) swap(s[i],s[n-i+2]); memset(suf,0,sizeof suf); for(int i=n;i>=1;i--) { if(s[i]==‘w‘)suf[i]=suf[i+1]+1; else suf[i]=suf[i+1]; } te=t; for(int i=1;i<=n;i++) { if(s[i]==‘w‘)te-=1+b; else te-=1; if(te<0)break; te-=a; int l=0,r=n; while(l<r-1) { int m=(l+r)/2; //printf("%lld %d %d %lld\n",t,m,i,alltime(m,i)); // printf("%d %d %d %lld\n",l,m,r,alltime(m,i)); if(alltime(m,i)>te)r=m; else l=m; } // printf("%lld %d %d\n",t,l,i); ans=max(ans,(ll)max((l+1),i)); } printf("%lld\n",ans); return 0; } /******************** 5 2 4 13 hhhwh ********************/
以上是关于Codeforces Round #345 (Div. 1)B. Image Preview的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #345 (Div. 2)
Codeforces Round #345 (Div. 2)
A Joysticks (Codeforces Round 345 (Div 2) )
Codeforces Round #345 (Div. 2)C. Watchmen(想法题)