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爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...
随机推荐
- 洛谷-P3927 SAC E#1 - 一道中档题 Factorial
原址 题目背景 数据已修改 SOL君(炉石主播)和SOL菌(完美信息教室讲师)是好朋友. 题目描述 SOL君很喜欢阶乘.而SOL菌很喜欢研究进制. 这一天,SOL君跟SOL菌炫技,随口算出了n的阶乘. ...
- JDBC和分包
JDBC(Java Data Base Connectivity,java数据库连接) JDBC是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写 ...
- 1044 拦截导弹 1999年NOIP全国联赛提高组 个人博客:attack.cf
1044 拦截导弹 1999年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 某国为了防御敌 ...
- android中常见的设计模式有哪些?
建造者模式 建造者模式最明显的标志就是Build类,而在Android中最常用的就是Dialog的构建,Notification的构建也是标准的建造者模式. 建造者模式很好理解,如果一个类的构造需要很 ...
- 初识Spinner
Spinner是个下拉列表框,与listview一样,也是adapterView的一个间接子类,是一个显示数据的窗口. <Spinner android:id="@+id/spinne ...
- zabbix2升级zabbix3
1.停服zabbix2,停服数据库/etc/init.d/zabbix_server stop/etc/init.d/mysqld stop 2.物理备份数据库cd /var/lib/mysql/ta ...
- ArcGIS Server 10.1发布GP服务
ArcGIS Server 10.1发布GP服务 ArcGIS Server 10.1发布GP服务确实更简单了,只是刚使用不怎么习惯.ArcGIS Server 10.1发布GP服务需要先在ArcCa ...
- UVA 10905 Children's Game (贪心)
贪心,假如任意给出一个序列,如果两两交换了以后会变大,那么就交换,直到不能交换为止. #include<bits/stdc++.h> using namespace std; ; stri ...
- CF Gym 100187A Potion of Immortality (思路,最坏情况的最小损失)
根据兔子试药情况可以缩小范围,如果死了,不在试过的药里面,如果活着,在试过的药里. 最糟的情况: 两个原则 1.能确定魔药所在的范围的尽量大,2.死得兔子尽量多. 如果当前不知道情况的药n为k的二倍以 ...
- Android(java)学习笔记134:Android数据存储5种方式总结
1.使用文件(File)存储 存储一般的数据 2.使用sharedperference(xml) 存储设置信息.配置信息.密码 3.数据库Sqlite 开源的,嵌入式的数据库,轻量级 4.使用Cont ...