AT_arc040_b [ARC040B] 直線塗り 题解
思路:
采用贪心思想。从读入的字符串的最后一个字符开始从后往前遍历,如果当前字符为 `.` 则需要涂色,计算出涂色的起始位置 i+1-r,然后更新最大的起始位置 maxi 并把记录时间的变量 cnt 加 1。更新完后我们需要移动到下一个没有涂色的位置 r-1,最后输出移动总距离 cnt+maxi 即可。
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, r, cnt=0, maxi=0;
string s;
cin>>n>>r;
cin>>s;
for(int i=s.size()-1;i>=0;i--)
{
if(s[i]=='.')
{
maxi=max(maxi,i-r+1);
cnt++;
i-=r-1;
}
}
cout<<cnt+maxi;
cout<<endl;//岛国题记得换行!!!
return 0;//好习惯
}