BNU 3692 I18n 模拟
题意:
在一篇文章中,单词可以缩写.例如单词Internationalization可以缩写为I18n,缩写的两端是原单词的首尾字母,中间的数字是被省略的字母的个数.
现在给你一篇缩写的文章,输出展开后的文章.
一个被缩写的单词展开有条件限制:
- 之前出现过的单词中有且只有一个符合这种缩写形式
展开缩写的时候还有一个规则:
- 如果缩写形式首尾字母都是小写,那么展开后的单词字母全部小写
- 如果缩写形式首尾字母都是大写,那么展开后的单词字母全部大写
- 如果缩写形式首字母大写,尾字母小写,那么展开后的单词首字母大写,其余字母小写
- 只有以上三种情况
比如:
Sample
s4e --> sample
S4e --> Sample
S4E --> SAMPLE
分析:
我开了一个 std::set<string> S[L][R][x]用来保存出现过的单词中 符合首字母为L尾字母为R中间省略了x个字母的单词的集合.
在读入的时候:
- 如果遇到特殊符号直接输出不用处理.
- 如果遇到单词,原样输出,然后把它统一处理成小写的形式插入到对应的集合.
- 如果遇到缩写形式:
- 如果对应单词集合的size为1,那么按照题中要求的规则输出.
- 否则该单词不能被展开,原样输出.
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <set>
using namespace std; bool isAlpha(char c) {
if('a' <= c && c <= 'z') return true;
if('A' <= c && c <= 'Z') return true;
return false;
} bool isNum(char c) { return '' <= c && c <= ''; } bool ok(char c) { return isAlpha(c) || isNum(c); } int id(char c) {
if('a' <= c && c <= 'z') return c - 'a';
return c - 'A';
} bool isBig(char c) { return 'A' <= c && c <= 'Z'; } char Toup(char c) {
if('A' <= c && c <= 'Z') return c;
return 'A' + c - 'a';
} char Tolow(char c) {
if('a' <= c && c <= 'z') return c;
return 'a' + c - 'A';
} set<string> S[][][]; string line; int main()
{
//freopen("in.txt", "r", stdin); while(getline(cin, line)) {
int l = line.length();
int s, t;
for(s = ; s < l; s++) {
if(isAlpha(line[s]))
{
for(t = s; t < l && ok(line[t]); t++); t--;
string sub = line.substr(s, t - s + );
int len = sub.length();
int lft = id(sub[]), rgh = id(sub[len-]);
if(len > && isNum(sub[])) {
int x = ;
for(int i = ; i < len && isNum(sub[i]); i++)
x = x * + sub[i] - ''; if(x >= && (int)S[lft][rgh][x].size() == ) {
string ans = *(S[lft][rgh][x].begin());
int _len = ans.length();
if(isBig(sub[])) ans[] = Toup(ans[]);
if(isBig(sub[len-])) for(int i = ; i < _len; i++) ans[i] = Toup(ans[i]);
cout << ans;
}
else cout << sub;
}
else {
cout << sub;
if(len >= ) {
for(int i = ; i < len; i++) sub[i] = Tolow(sub[i]);
S[lft][rgh][len-].insert(sub);
}
}
s = t;
}
else cout << line[s];
}
printf("\n");
} return ;
}
代码君
BNU 3692 I18n 模拟的更多相关文章
- bnu 4352 XsugarX的疯狂按键识别(暴力模拟)
http://www.bnuoj.com/bnuoj/problem_show.php?pid=4352 [题意]:给你个长串,输出该长串中能第一放出的技能,每个技能有对应的一个小子串,不能放出任何技 ...
- 模拟MVC-WebForm实现ModelBinding
(一) 前言 用ASP.NET MVC的时候,我们都 ...
- 使用 jQuery.i18n.properties 实现 Web 前端的国际化
jQuery.i18n.properties 简介 在介绍 jQuery.i18n.properties 之前,我们先来看一下什么是国际化.国际化英文单词为:Internationalization, ...
- Struts2之i18N国际化
对于i18n其实没有太多内容,一般的公司用不到这些内容,除非是跨国公司,但即便是跨国公司也不一定会使用i18n来进行国际化处理,所以本篇内容仅供大家了解,不做深入的探讨,希望通过本篇内容,可以帮助大家 ...
- Java 模拟面试题
1.面向对象的特点 继承,封装,多态 2.对象和类的区别是什么? 对象是对客观事物的抽象,类是对对象的抽象.类是一种抽象的数据类型,它们的关系是,对象是类的实例,类是对象的模板. 3.静态成员和实例成 ...
- BNUOJ 52308 We don't wanna work! set模拟
题目链接: https://acm.bnu.edu.cn/v3/problem_show.php?pid=52308 We don't wanna work! Time Limit: 60000msM ...
- App开发:模拟服务器数据接口 - MockApi
为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
- Python 爬虫模拟登陆知乎
在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...
随机推荐
- [HNOI 2012]三角形覆盖问题
Description 二维平面中,给定 N个等腰直角三角形(每个三角形的两条直角边分别 平行于坐标轴,斜边从左上到右下).我们用三个非负整数( x, y, d)来描 述这样一个三角形 ...
- Myeclipse连接数据库删除数据库(JDBC)
package com.test.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Pr ...
- 我们为什么要看《超实用的HTML代码段》
不知道自己HTML水平如何,不知道HTML5如何进化?看这张图 如果一半以上的你都不会,必须看这本书,阿里一线工程师用代码和功能页面来告诉你每一个技术点. 都会一点,但不知道如何检验自己,看看本书提供 ...
- ftp错误
ftp 550 检查是否目录,文件确定存在. 服务器列表是要设置unix列表模式.
- HDU 4055 Number String(DP计数)
题意: 给你一个含n个字符的字符串,字符为'D'时表示小于号,字符为“I”时表示大于号,字符为“?”时表示大小于都可以.比如排列 {3, 1, 2, 7, 4, 6, 5} 表示为字符串 DIIDID ...
- 从PEP-8学习Python编码风格
(搬运自我在SegmentFault的博客) 关于空行 类与顶级函数(top-level function)的定义之间应当空两行. 类中的方法之间应当空一行. 方法中的逻辑部分之间可以空一行. 关于原 ...
- 2018.2.14 Java中的哈夫曼编码
概念 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种.Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造 ...
- extranuclear gene|non-Mendelian inheritance|uniparental inheritance|maternal inheritance
5.8某些细胞器含有DNA 因为除细胞核内的染色体外,细胞质中的细胞器上也有遗传物质(这类遗传物质被称为核外基因(extranuclear gene),比如线粒体上的rRNA,这是因为细胞器基因组是独 ...
- java基础——快速排序
今天又把以前学的快速排序拿出来回忆一下 高快省的排序算法 有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢. 假设我们现在对“6 1 2 7 9 3 ...
- jquery的正则表达式
正则表达式 位置: ^ 开头 $ 结尾 次数: * 0或多个 + 1或多个 ? 0或1个 {n} 就是n个 {n,} 至少n个 {n,m} ...