当前位置: 首页 > 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.hskmm.com/?act=detail&tid=24179

相关文章:

  • QBXT2025S Day3题
  • python+vue在线视频课程学习系统设计(源码+文档+调试+基础修改+答疑) - 详解
  • pdf翻译
  • 【做题记录】CF2600左右有趣的思维题1
  • 【Android】RuntimeShader 应用
  • 【Rive】rive-android源码分析
  • zkSync Era主网上线:首个zkEVM全面开放的技术突破
  • Microsoft Access SQL 查询中的通配符 - 详解
  • 洛谷P11738 [集训队互测 2015] 未来程序改
  • mcp 面试题
  • 【开题答辩过程】以《基于SpringBoot+Vue+uni-app的智慧校园服务系统的设计与搭建》为例,不会开题答辩的可能进来看看
  • 6_什么是知识图谱
  • 微信ipad协议个微机器人开发API
  • 学习方法
  • ai提交消息常用的 chore,原来是个单词(琐事/零散任务)+约定,用于非功能性提交
  • 微信开发之朋友圈自动评论的技术实现
  • 多项式定理
  • The Brain in Your Toes: Can Tiny Foot Movements Boost BDNF and Sharpen the Mind? - 教程
  • 详细介绍:Kafka09-速答-尚硅谷
  • day15 课程(继承 )
  • node菜单服务引起的后台异常表象到运维释放从库的数据库连接及驱动修改配置,重新部署生效
  • 微商本地化发展模式的借鉴与探讨——以开源AI智能名片链动2+1模式S2B2C商城小工具为例
  • Docker 部署 RAGFlow 全流程教程
  • 树的直径
  • 深入解析:从零起步学习Redis || 第四章:Cache Aside Pattern(旁路缓存模式)以及优化策略
  • 深度解码电子设计可靠性:形式验证(Formal Verification)如何护航 IC 高质量之路
  • 251004
  • gradle Cause: zip END header not found
  • 10 4
  • 叠爱心(love.*)