题解 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")
    }
}

posted @ 2020-12-02 12:00  -lala-  阅读(124)  评论(0)    收藏  举报