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. ...
随机推荐
- ESC/POS打印控制命令
0x00. Command Notation [Name] The name of the command. [Format] ...
- 【个人笔记】《知了堂》node.js简介及创建应用
Node.js是什么? Node.js是建立在谷歌Chrome的JavaScript引擎(V8引擎)的Web应用程序框架.Node.js自带运行时环境可在Javascript脚本的基础上可以解释和执行 ...
- 15 Validation
一.模型选择问题 如何选择? 视觉上 NO 不是所有资料都能可视化;人脑模型复杂度也得算上 通过Ein NO 容易过拟合;泛化能力差 通过Etest NO 能保证好的泛化,不过往往没法提前获得测试资料 ...
- pytorch实现DCGAN、pix2pix、DiscoGAN、CycleGAN、BEGAN以及VAE
https://github.com/sunshineatnoon/Paper-Implementations
- 《深入理解Java虚拟机》读书笔记-垃圾收集器与内存分配策略
在堆里存放着java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前需要知道哪些对象还存活,哪些对象已经死去.那怎么样去判断对象是否存活呢? 一.判断对象是否存活算法 1.引用计数法 实现思路:给 ...
- 代理模式与java中的动态代理
前言 代理模式又分为静态代理与动态代理,其中动态代理是Java各大框架中运用的最为广泛的一种模式之一,下面就用简单的例子来说明静态代理与动态代理. 场景 李雷是一个唱片公司的大老板,很忙, ...
- tcpip第三章
1,ip协议不可靠.无连接特性介绍 不可靠:计算机A往计算机B发送数据报1,若途径的路由器缓存已满,或者ttl(time to live 生存周期)到了,则路由器直接丢弃数据包1,并产生icmp数据包 ...
- JavaScript 实现发布消息后,距离当前时间的实现
某条消息发布后,距离当前时间多久的时间显示 //显示发布时间的函数 function pastTime(_createTime) { //var createTime = _createTime.su ...
- 坑中速记整理! 使用 kotlin 写第一个 ReactNative Android 模块
Kotlin 和 Swift, 两大新宠! 借 ReactNative 熟悉下 kotlin 的用法,不料掉坑里面了.昨晚花了大半夜,趁这会儿思路清晰,把涉及到的一些关键信息,迅速整理下. 最佳的使用 ...
- menu菜单项和menubutton菜单按钮的结合使用
<!--创建需要显示的菜单按钮(munebutton),menu指定的是菜单项--><a href="javascript:void(0)" id="m ...