当前位置: 首页 > news >正文

题解:P14124 [SCCPC 2021] Nihongo wa Muzukashii Desu

P14124 题解

题目传送门

题意简化

给你 \(n\) 个字符串,根据字符串的后缀按要求更改字符串。

题目分析

一般的转换规则可以分为 5 种,如下表。

后缀类型 更改后
chimasu tte
rimasu ^
mimasu nde
bimasu ^
nimasu ^
kimasu ite
gimasu ide
shimasu shite

根据题意, ikimasu 需要进行特判,转换为 itte。

根据观察,我们发现题目中给出的字符串都是以 masu 结尾的,所以我们只需要判断 masu 前面的部分便能确定是哪种类型。

我们自然而然想到用遍历来判断,但是每句话前面的东西我们不知道有多长。所以,我们需要倒着遍历。建立一个字符串存储去除 masu 后的后缀,直到和上面的任意一种类型匹配。

由于是倒着遍历的,所以我们的判断条件也要倒过来

int type(string s) {string hz = ""; // 存储后缀for(int i = s.size() - 5; i >= 0; i--) { // 从后往前遍历hz += s[i];if(hz == "ihc" || hz == "ir") return 1;if(hz == "im" || hz == "ib" || hz == "in") return 2;if(hz == "ik") return 3;if(hz == "ig") return 4;if(hz == "ihs") return 5;}
}

确定好类型之后,我们再来确定内容的位置。这里的内容是指去掉后缀的剩余部分。

经过观察,后缀长度有两种,一种是 6 个字符的,一种是 7 个。这里我们用和上面同样的方法判断长度。

int type2(string s) {string hz = "";for(int i = s.size() - 5; i >= 0; i--) {hz += s[i];if(hz == "im" || hz == "ib" || hz == "in" || hz == "ir" || hz == "ik" || hz == "ig") return 1; // 六个字符if(hz == "ihc" || hz == "ihs") return 2; // 七个字符}
}
int len(string s) { // 内容位置if(type2(s) == 2) return s.size() - 7;return s.size() - 6;
}

接下来是替换部分。这部分就很简单了,直接根据上面返回的数值进行拼接就行。为了方便,这里开了一个数组存储更改后的后缀。

string change[] = {"", "tte", "nde", "ite", "ide", "shite"};
// 省略其他部分
ans = str.substr(0, len(str)) + change[type(str)]; // substr(0, n)返回的是字符串下标从 0 开始往后 n 位的字串

下面给出完整代码。

代码

#include<iostream>
#include<string>
using namespace std;
int t;
string str, ans;
string change[] = {"", "tte", "nde", "ite", "ide", "shite"};
int type(string s) {string hz = "";for(int i = s.size() - 5; i >= 0; i--) {hz += s[i];if(hz == "ihc" || hz == "ir") return 1;if(hz == "im" || hz == "ib" || hz == "in") return 2;if(hz == "ik") return 3;if(hz == "ig") return 4;if(hz == "ihs") return 5;}
}
int type2(string s) {string hz = "";for(int i = s.size() - 5; i >= 0; i--) {hz += s[i];if(hz == "im" || hz == "ib" || hz == "in" || hz == "ir" || hz == "ik" || hz == "ig") return 1;if(hz == "ihc" || hz == "ihs") return 2;}
}
int len(string s) {if(type2(s) == 2) return s.size() - 7;return s.size() - 6;
}
int main() {cin >> t ;while(t--) {cin >> str ;if(str == "ikimasu") cout << "itte" << endl;else {ans = str.substr(0, len(str)) + change[type(str)];cout << ans << endl;}}return 0;
}

谢谢观看!

http://www.jsqmd.com/news/8178/

相关文章:

  • 上位机知识篇---服务器脚本一直运行方法 - 详解
  • QBXT2025S Day3题
  • python+vue在线视频课程学习系统设计(源码+文档+调试+基础修改+答疑) - 详解
  • DeepSeek V3.1-Terminus、阿里 Qwen3-Max、ChatGPT Pulse 同周登场!| AI Weekly 9.22-9.28 - 实践
  • 【做题记录】CF2600左右有趣的思维题1
  • pdf翻译
  • OpenEuler 25.03 installed UKUI but cant run msedge and chrome
  • 实用指南:iPhone美区账号登录指南:轻松下载ChatGPT应用
  • 网络调整config.xml的android.mk解析
  • 【Android】RuntimeShader 应用
  • 【Rive】rive-android源码分析
  • 完整教程:基于Spring Boot的爱琴海购物公园网上商城系统的设计与实现
  • Microsoft Access SQL 查询中的通配符 - 详解
  • 洛谷P11738 [集训队互测 2015] 未来程序改
  • mcp 面试题
  • 6_什么是知识图谱
  • 实用指南:[创业之路-645]:手机属于通信?还是属于消费类电子?还是移动互联网?
  • 【开题答辩过程】以《基于SpringBoot+Vue+uni-app的智慧校园服务系统的设计与搭建》为例,不会开题答辩的可能进来看看
  • 微信ipad协议个微机器人开发API
  • 面向对象编程(OOP)的三大特性之一(封装、继承、多态)就是第八章聚焦于C++的多态(Polymorphism),这
  • ai提交消息常用的 chore,原来是个单词(琐事/零散任务)+约定,用于非功能性提交
  • 答疑解惑:无人机是否一定有主控,主控和飞控是一个东西吗,无人机是否只有飞控就可以飞行???
  • 多项式定理
  • The Brain in Your Toes: Can Tiny Foot Movements Boost BDNF and Sharpen the Mind? - 教程
  • 一直好奇无人机飞控上的SD卡槽是不是用来装系统盘的,结果发现这个其实就是个数据存储的作用,飞控板子上自带系统盘存储芯片
  • 四旋翼无人机 —— 飞控硬件推荐 —— 微空MicoAir743 V2飞控双IMU蓝牙调参 支持APM/PX4/INAV/BF固件
  • 详细介绍:OpenAI近日推出了一项名为 ChatGPT Pulse 的全新功能
  • 详细介绍:Kafka09-速答-尚硅谷
  • GPT‑5 都更新了些什么? - 实践
  • day15 课程(继承 )