题目:
题目思路:
用两个数组来存储进行差分过的情况
对每个彗星进行遍历
构成差分过的数组
然后对数组进行还原
然后遍历每一秒
将满足不存在红彗星
但存在蓝彗星的情况秒数相加
得出答案
代码详细:
#include<stdio.h>
#include<iostream>
using namespace std;
int blue[(int)2e5+6]={0};
int red[(int)2e5+6]={0};
int main()
{
string s;
int n,t,time;
cin>>n>>t;
cin>>s;
for(int i=0;i<n;i++)
{
scanf("%d",&time);//该情况下的起始时间
if(s[i]=='B')//进行差分
{
blue[time]++;
blue[time+t]--;
}
else
{
red[time]++;
red[time+t]--;
}
}
int ans=0;
for(int i=1;i<2e5+6;i++)//遍历每一秒
{
blue[i]+=blue[i-1];//进行前缀和回归原本的差分前的数组
red[i]+=red[i-1];//进行前缀和回归原本的差分前的数组
if(blue[i]!=0&&red[i]==0) ans++;//当出现蓝彗星,没出现红彗星的时候该时间可以算做一秒
}
cout<<ans;//输出满足条件的秒数
return 0;
}
PS:不经一番寒彻骨,怎得梅花扑鼻香。____黄蘖禅师《上堂开示颂》