USACO-Moo Operations

题目描述

Because Bessie is bored of playing with her usual text string where the only characters are C, O, and W, Farmer John gave her �Q new strings (1≤�≤100)(1≤Q≤100), where the only characters are M and O. Bessie's favorite word out of the characters M and O is obviously MOO, so she wants to turn each of the �Q strings into MOO using the following operations:

  1. Replace either the first or last character with its opposite (so that 'M' becomes 'O' and 'O' becomes 'M').

  1. Delete either the first or last character.

Unfortunately, Bessie is lazy and does not want to perform more operations than absolutely necessary. For each string, please help her determine the minimum number of operations necessary to form MOO or output −1−1 if this is impossible.

输入格式

The first line of input contains the value of �Q.

The next �Q lines of input each consist of a string, each of its characters either M or O. Each string has at least 11 and at most 100100 characters.

输出格式

Output the answer for each input string on a separate line.

题意翻译

题目描述


农夫约翰给了奶牛贝西 �Q 个新字符串 (1≤�≤100)(1≤Q≤100) ,其中只有字符 M 和 O ,她想将 �Q 个字符串都变成 MOO。

贝西可以用如下的方式改变字符串:

  • 用相反的字符替换第一个或最后一个字符(将 M 变成 O ,将 O 变成 M )。

  • 删除第一个或最后一个字符。

贝西只想用最少的次数完成改变。请你帮她找到需要的最小改变次数。如果不可能在有限的步数中完成这个任务,请输出 -1 。

输入格式


输入数据的第一行是一个正整数 �Q

接下来的 �Q 行中,每行一个只包含大写字母 M 或 O 的字符串 �S ,保证 1≤∣�∣≤1001≤∣S∣≤100 。

输出格式


输出 �Q 行,每行为该测试点最小操作次数,如果不可能在有限的步数中完成这个任务,请输出 -1 。

提示


样例解释 1

将第一个字符串转换为 MOO的 44 个操作序列如下:

  • 用O替换最后一个字符(操作1)

  • 删除第一个字符(操作2)

  • 删除第一个字符(操作2)

  • 删除第一个字符(操作2)

可以证明,第二个字符串无法转换为 MOO。

第三个字符串已经是 MOO,因此无需执行任何操作。

数据范围

对于 100%100% 的测试点,保证 1≤�≤1001≤Q≤100, 1≤∣�∣≤1001≤∣S∣≤100 。

输入输出样例

输入 #1

3

MOMMOM

MMO

MOO

输出 #1

4

-1

0

说明/提示

Explanation for Sample 1

A sequence of 44 operations transforming the first string into MOO is as follows:

Replace the last character with O (operation 1)

Delete the first character (operation 2)

Delete the first character (operation 2)

Delete the first character (operation 2)

The second string cannot be transformed into MOO. The third string is already MOO, so no operations need to be performed.

Scoring

  • Inputs 2−42−4: Every string has length at most 33.

  • Inputs 5−115−11: No additional constraints.

代码如下:

#include<bits/stdc++.h>
using namespace std;
int q;
char a[1001]={};
int main(){
	cin>>q;
	while(q--){
		cin>>a;
		int z=strlen(a),s=-1,flag=0;
		for(int i=0;i<z-2;i++){
			if(a[i]=='M'&&a[i+1]=='O'&&a[i+2]=='O'){
				s=z-3;
				break;
			}
			elseif(a[i]=='M'&&a[i+1]=='O'&&a[i+2]=='M'){
				if(s<0){
					s=z-2;
				}else{
					s=min(s,z-2);
				}
				
			}
			elseif(a[i]=='O'&&a[i+1]=='O'&&a[i+2]=='O'){
				if(s<0){
					s=z-2;
				}else{
					s=min(s,z-2);
				}
			}elseif(a[i]=='O'&&a[i+1]=='O'&&a[i+2]=='M'){
				if(s<0){
					s=z-1;
				}else{
					s=min(s,z-1);
				}
			}else{
				if(s<0) s=-1;
			}
			
		}
		cout<<s<<endl;
		
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值