2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Traffic Light

Traffic Light

时间:2020-01-13 08:16:13

相关推荐

Traffic Light

题目大意

给定一个循环播放的红绿灯标识字段s,红绿灯一秒变一个颜色,只有三种颜色,红绿黄,现在给出你所在时刻的红绿灯的颜色c,但是你并不知道你所处的具体时间点,求从任意一个颜色是c的点出发后最多经过t秒一定能遇到一个绿灯,求最小的t

题目链接

Problem - 1744C - Codeforces

又是一道我一直卡住的题,不是因为别的,只是不会活学会用罢了,记录这个题就是为了长个教训,尤其是时间超限的情况,一定要想一些更高效的办法。

例如下文中即将用到的lower_bound:

#include<bits/stdc++.h>using namespace std;char s[600000];int main(){int t,k;scanf("%d",&t);while(t--){int n;char c;cin>>n;cin>>c;for(int i=0;i<n;i++){cin>>s[i];s[i+n]=s[i];//重复一遍,方便找到c灯之后的第一个绿灯}if(c=='g'){cout<<0<<endl;}else{vector<int>vec;//用来存绿灯的各位置 for(int i=0;i<2*n;i++){if(s[i]=='g')vec.push_back(i);}int ans=0;for(int i=0;i<n;i++) {if(s[i]==c)//遍历找到c灯位置 {k=lower_bound(vec.begin(),vec.end(),i)-vec.begin();//找到vec中大于等于i的第一个值的位置//也就是c灯后第一个绿灯的位置 ans=max(ans,vec[k]-i);}}cout<<ans<<endl;}} }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。