A. 拼音魔法
A. 拼音魔法
Time limit per test: 1.0 seconds
Time limit all tests: 1.0 seconds
Memory limit: 256 megabytes
Accept / Submit: 341 / 2134
魔法学校小学一年级有一种题。就是给一个字的拼音,给一个声调,让你正确地注音。但魔法老师给了巨量的题,你不用魔法根本不可能做完。所以现在要让你发明一种魔法完成这个任务。
问题已经讲完了,下面开始教授汉语。(会汉语或者自认为会汉语的可以自动跳过)
汉语中一个字的拼音由声母和韵母两部分组成,在极少数情况下也会没有声母,但一定有韵母。
一般认为,声母有 b, p, m, f, d, t, l, n, g, k, h, j, q, x, z, c, s, zh, ch, sh, r, y, w;韵母有:a, e, o, i, u, ü, ai, ei, ui, ao, ou, iu, ie, üe, er, an, en, in, un, ün, ang, eng, ing, ong。
不是所有的字母都能组合的,组合的时候有时会发生一些神奇的事情,例如 üe 变成了 ue。但是标调规则有如下口诀:
有 a 先找 a,没 a 找 o e,i u 并排标在后,这样标调不会错。
只有下面列出的元素可能会被标调。请按照下表输出(尤其注意 a 不要输出成 ɑ 了):
- 第一声:ā ē ī ō ū ǖ。
- 第二声:á é í ó ú ǘ。
- 第三声:ǎ ě ǐ ǒ ǔ ǚ。
- 第四声:à è ì ò ù ǜ。
- 轻声:a e i o u ü。
辅助材料:由教育部公布的拼音方案。如果有描述不一致的地方,请以本题描述为准。
Input
第一行一个整数 T (1≤T≤105)。
下面 T 行,每行一个拼音:拼音声调在各个拼音之后,用数字 [1-4] 进行表示。例如 zhong1 guo2。没有数字的说明是轻声,不用标调。
按照国际惯例,输入文件全部由 ASCII 编码组成。ü 用 v 来代替。但在输出中,应仍然用 ü 来表示。
Output
对于每一组数据,输出 Case x: y。其中 x 是从 1 开始的测试数据编号,y 是一个拼音标调后的答案。
注意:对于非 ASCII 字符的输出,请使用 UTF-8 编码。
Examples
5
zhong1
guo2
me
que1
nv3
Case 1: zhōng
Case 2: guó
Case 3: me
Case 4: quē
Case 5: nǚ
Note
会 C/C++ 的魔法师最可爱了。
/*
* @Author: lyucheng
* @Date: 2017-05-12 18:42:32
* @Last Modified by: lyucheng
* @Last Modified time: 2017-05-12 21:37:29
*/ #include <bits/stdc++.h>
using namespace std;
string str;
int t;
string tr(char x,int n){
if(x=='a'){
if(n==){
return "ā";
}else if(n==){
return "á";
}else if(n==){
return "ǎ";
}else if(n==){
return "à";
}
}else if(x=='e'){
if(n==){
return "ē";
}else if(n==){
return "é";
}else if(n==){
return "ě";
}else if(n==){
return "è";
}
}else if(x=='i'){
if(n==){
return "ī";
}else if(n==){
return "í";
}else if(n==){
return "ǐ";
}else if(n==){
return "ì";
}
}else if(x=='o'){
if(n==){
return "ō";
}else if(n==){
return "ó";
}else if(n==){
return "ǒ";
}else if(n==){
return "ò";
}
}else if(x=='u'){
if(n==){
return "ū";
}else if(n==){
return "ú";
}else if(n==){
return "ǔ";
}else if(n==){
return "ù";
}
}else if(x=='v'){
if(n==){
return "ǖ";
}else if(n==){
return "ǘ";
}else if(n==){
return "ǚ";
}else if(n==){
return "ǜ";
}
}
}
int main(){
// freopen("in.txt","r",stdin);
scanf("%d",&t);
for(int ca=;ca<=t;ca++){
printf("Case %d: ",ca);
cin>>str;
string s="";
int n=str.size();
int op=str[n-]-''; //是不是摘帽子
bool ft=false;
for(int i=;i<n;i++){
if(str[i]=='y'||str[i]=='j'||str[i]=='q'||str[i]=='x'||str[i]=='e'){
ft=true;
break;
}
}
for(int i=;i<n;i++){
if(str[i]=='v'){
if(ft==true)
str[i]='u';
}
} //如果最后一位有整数
if(op>=&&op<=){
bool flag=false;
//先找a
s="";
for(int i=;i<n;i++){
if(str[i]=='a'){
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
flag=true;
break;
}
}
if(flag==true){
cout<<str<<endl;
continue;
} //再找o e
s="";
for(int i=;i<n;i++){
if(str[i]=='o'||str[i]=='e'){
if(str[i]=='o'){
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}else{
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}
flag=true;
break;
}
}
if(flag==true){
cout<<str<<endl;
continue;
} //然后找 u i
bool f1=false;
bool f2=false;
for(int i=;i<n;i++){
if(str[i]=='i') f1=true;
if(str[i]=='u'||str[i]=='v') f2=true;
}
//如果是并存的
if(f1==true&&f2==true){
for(int i=;i<n;i++){
if(str[i]=='i'||str[i]=='u'||str[i]=='v'){
//加后边那一个
if(f1==true){
f1=false;
continue;
}
if(str[i]=='o'){
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}else if(str[i]=='u'){
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}else{
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}
flag=true;
break;
}
}
}else{
//否则的话就加第一个
for(int i=;i<n;i++){
if(str[i]=='i'||str[i]=='u'||str[i]=='v'){
if(str[i]=='o'){
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}else if(str[i]=='u'){
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}else{
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}
flag=true;
break;
}
}
}
cout<<str<<endl;
}else{
cout<<str<<endl;
}
}
return ;
}
A. 拼音魔法的更多相关文章
- EOJ 3256 拼音魔法
模拟. 有$a$先标$a$,其次是$o$和$e$,$o$和$e$在韵母中不会同时存在.最后是$u$和$i$,这两个字母在韵母中可能同时存在,标在后面的那个.输出那些字符的话直接输出就可以了. 举几个例 ...
- 隐马尔科夫模型python实现简单拼音输入法
在网上看到一篇关于隐马尔科夫模型的介绍,觉得简直不能再神奇,又在网上找到大神的一篇关于如何用隐马尔可夫模型实现中文拼音输入的博客,无奈大神没给可以运行的代码,只能纯手动网上找到了结巴分词的词库,根据此 ...
- iOS 汉字的拼音
获取汉字的拼音 #import <Foundation/Foundation.h> @interface NSString (Utils) /** * 汉字的拼音 * * @return ...
- Oracle汉字转拼音package
--函数GetHzFullPY(string)用于获取汉字字符串的拼音 --select GetHzFullPY('中华人民共和国') from dual; --返回:ZhongHuaRenMinGo ...
- Ubuntu 下ibus拼音输入法启用 (ubuntu 16.04
Ubuntu 下ibus拼音输入法启用 我安装的是英文版的ubuntu 16.04,打开只带英文,并没有中文. 设置输入法为iBus 从system settings 进入language suppo ...
- JavaScript 汉字与拼音互转终极方案 附JS拼音输入法
转:http://www.codeceo.com/article/javascript-pinyin.html 前言 网上关于JS实现汉字和拼音互转的文章很多,但是比较杂乱,都是互相抄来抄去,而且有的 ...
- lumia手机wp系统应用列表如何设置按照拼音
1.安装应用多了就会这样·· 2.想用拼音排列,请把系统设置里的区域语言中的区域和格式改为中国,此时,屏幕壁纸上是"四月十五日". 3.想用笔画排列,请把系统设置里的区域语言中的区 ...
- SQL汉字转拼音函数-支持首字母、全拼
SQL汉字转拼音函数-支持首字母.全拼 FROM :http://my.oschina.net/ind/blog/191659 作者不详 --方法一sqlserver汉字转拼音首字母 --调用方法 s ...
- Mono 3.2 测试NPinyin 中文转换拼音代码
C#中文转换为拼音NPinyin代码 在Mono 3.2下运行正常,Spacebuilder 有使用到NPinyin组件,代码兼容性没有问题. using System; using System. ...
随机推荐
- oracle 表查询(二)
1.使用逻辑操作符号问题:查询工资高于500或者是岗位为manager的雇员,同时还要满足他们的姓名首字母为大写的J?select * from emp where (sal > 500 or ...
- 01背包java实现(入门到精通)
一.什么是01背包 01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的体积为W1,W2至Wn,与之相对应的价值为P1,P2至Pn.01背包是背包问题中最简单的问题.01背包的约束条件是给定 ...
- 分享基于分布式Http长连接框架--架构模型
我画了个简单的架构图来帮助说明: 其实为发布订阅架构模式. 生产者和消费者我们统一可理解为客户端,消息中间件可认为是服务端. 生产者和消费者做为客户端要跟服务端交互,则先通过代理订阅服务端,订阅成功后 ...
- NDK各个版本链接
ndk_r15c (July 2017) Windows 32-bit : https://dl.google.com/android/repository/android-ndk-r15c-wind ...
- javascript中的DOM介绍(一)
一.基础知识点 1.DOM是文档对象模型,是针对HTML和XML文档的一个API(应用程序接口) 2.DOM描绘了一个层次化的节点数,允许开发人员进行添加,移除个修改等操作 3.IE浏览器中所有的DO ...
- 基于SSM之Mybatis接口实现增删改查(CRUD)功能
国庆已过,要安心的学习了. SSM框架以前做过基本的了解,相比于ssh它更为优秀. 现基于JAVA应用程序用Mybatis接口简单的实现CRUD功能: 基本结构: (PS:其实这个就是用的Mapper ...
- VBA.NET 系统可行性分析模板
系统可行性分析 1. 技术可行性分析 前提: 系统不知在Window系统中,开发环境不受限制:系统以C/S结构为主,提供大量的数据操作:主要用VB.NET开发,提高安全性和访问效率. 基本要求 客户 ...
- Java历程-初学篇 Day08 数组
一,什么是数组 所谓数组,是相同数据类型的元素按一定顺序排列的集合.若将有限个类型相同的变量的集合命名,那么这个名称为数组名.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.用 ...
- mysqldumpslow -- 分析慢查询日志
格式:mysqldumpslow [选项] 慢查询日志路径 选项: -s 排序方式,可选值有c(记录次数).t(查询时间).l(锁定时间).r(返回记录).a(平均) -t 显示的记录数 - ...
- 华为olt ma5680t常用命令详解
进入待替换的故障ONU所注册的单板 interface epon 0/1 //此处可以通过查看PON口下设备状态来获取需要替换的ONU ID.假设故障设备位于2端口,ID为6 ont ...