题解 CF1431B 【Polycarp and the Language of Gods】
看一眼题目思路很快就有了,只要遵循以下规则记录答案即可:
- 每次遇见 \(w\) 则 \(ans\)++;
- 碰到一串 \(v\) 时,用 \(sum\) 记录 \(v\) 的个数,再遇到 \(w\) 时,\(ans\) 加上 \(sum\) 的一半。
- 字符串输入完后,\(ans\) 还要加上 \(sum\) 的一半。
这样就能分辨用最少的下划线 \(v\) 和 \(w\) 了。
于是我快乐的写下了如下代码:
C++
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int t;
string s;
int main()
{
cin>>t;
while(t--)
{
cin>>s;
int ans=0,sumv=0;
int len=s.length();
for(int i=0;i<len;i++)
{
if(s[i]=='w') ans++,ans+=sumv/2,sumv=0;
else sumv++;
}
ans+=sumv/2;
cout<<ans<<endl;
}
return 0;
}
然而这题比较特殊,只能用Kotlin提交。如下:
Kotlin
private fun readLn() = readLine()!!
private fun readInt() = readLn().toInt()
fun main()
{
val t:Int = readInt()
for(index in 1..t)
{
val s:String = readLn()
val len:Int = s.length
var ans:Int = 0
var i:Int = 0
while(i<len)
{
if(s[i]=='w') ans++
if(s[i]=='v')
{
var sumv:Int = 1
while(i+1<len && s[i+1]=='v')
{
i++
sumv++
}
ans+=sumv/2
}
i++
}
println("$ans")
}
}

浙公网安备 33010602011771号