题解:CF1932A Thorns and Coins
Nake_fu
·
·
题解
题目传送门
这道题很明显可以用模拟过去,我们来算一下时间复杂度。
极限情况:t=1000,n=50 。
# 那么该怎么模拟呢?
听我娓娓道来。
很简单。
用一个 $ans$ 和一个 $cnt$ 来分别记录答案和荆棘数就好了。
碰见一个金币赶紧记录,当连续有两个荆棘我们就跳出模拟。
为什么碰见连续的两个荆棘就跳出呢?

走一步还是两步都走不过去。
这样即使荆棘后面是人人都爱的金币也无济于事。
[AC](https://www.luogu.com.cn/record/158107642) 代码:
```cpp
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
string a;
int n;
signed main() //signed 是有符号的意思,可以代替int(小装一下)
{
int t;
cin>>t;
while(t--)
{
cin>>n;
cin>>a;
int cnt=0,ans=0;
for(int i=0;i<n;i++)
{
if(a[i]=='*') cnt++; //记录连续的荆棘
else cnt=0; //没了荆棘就把记录归零
if(cnt>=2) break; //荆棘数过多导致没法走了,就跳出循环
if(a[i]=='@') ans++; //记录金币
}
cout<<ans<<endl; //输出!!!!
}
return 0;
}
```
无注释代码:
```cpp
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
string a;
int n;
signed main()
{
int t;
cin>>t;
while(t--)
{
cin>>n;
cin>>a;
int cnt=0,ans=0;
for(int i=0;i<n;i++)
{
if(a[i]=='*') cnt++;
else cnt=0;
if(cnt>=2) break;
if(a[i]=='@') ans++;
}
cout<<ans<<endl;
}
return 0;
}
```