这就是我那个心心念的青蛙跳了…这是我大一第一次训练赛的最后一个题。那之后隔了两个月才a出来。也有点感情了…毕竟当时样例各种错…而且也是从这道题让我知道cf可以看错误样例。也能看别人代码…
下图,说多了都是累
题目其实并不难,可是对于那时候不知道为什么感觉就是写不出来。
做加热器,了解到一个index索引并维护的方法:https://blog.csdn.net/weixin_44031744/article/details/88861954
对于这个题又让我跃跃欲试了。
怎么说,时隔3个月。思路比以前清晰了好多,以至于现在看以前a出来代码都怀疑那是我以前写的?这写的什么啊,一会++,一会- -。这样也能对!!!???
然后莫名的佩服了一下曾经…
这个题挺不错的,对于初涉刷题的我,输入是一个坑,而且这个坑遇到了两次。
今年打蓝桥杯的时候也遇到了,虽然在赛场时发现了错误。但确实耽误了老长时间,
如今重新做,还是遇见了这个坑…
这个坑就是这个输入。它这一串axis是01串。因为没有空格,所以如果用整型保存的话输入那么长的一串就是一个数,所以这个要用字符保存。
今年蓝桥杯的迷宫也是这样的…输入怎么也不出结果。记住这个教训了!!!
这个贪心策略其实还是很简单的,从出发点最远的地方跳,如果是0就回退,直到回退到1,如果又回退到了出发点,说明forg跳不过去。输出-1,return就行了。
之后又是些小bug,调试之后就a出来了。
虽说我重新做了一遍,但实不相瞒花了快一个小时做出来的…
只要思路清晰,哪里该break的break,哪里return的return,问题不大。
#include <iostream>
using namespace std;
char axi[120];
int main(){
int n, d;
cin >> n >> d >> axi+1;
int cnt = 0, cur = 1;
while(true){
int index = 0;
if(cur+d >= n){
cnt++; cout << cnt << endl; return 0;
}
for(int i = cur+d; i >= cur; --i)
if(axi[i]-'0'){
index = i;
if(i == cur) index = 0;
break;
}
if(index == 0){
cout << -1 << endl; return 0;
}
cnt++;
cur = index;
}
}