题意:

在一篇文章中,单词可以缩写.例如单词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 模拟的更多相关文章

  1. bnu 4352 XsugarX的疯狂按键识别(暴力模拟)

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=4352 [题意]:给你个长串,输出该长串中能第一放出的技能,每个技能有对应的一个小子串,不能放出任何技 ...

  2. 模拟MVC-WebForm实现ModelBinding

    (一) 前言                                                                           用ASP.NET MVC的时候,我们都 ...

  3. 使用 jQuery.i18n.properties 实现 Web 前端的国际化

    jQuery.i18n.properties 简介 在介绍 jQuery.i18n.properties 之前,我们先来看一下什么是国际化.国际化英文单词为:Internationalization, ...

  4. Struts2之i18N国际化

    对于i18n其实没有太多内容,一般的公司用不到这些内容,除非是跨国公司,但即便是跨国公司也不一定会使用i18n来进行国际化处理,所以本篇内容仅供大家了解,不做深入的探讨,希望通过本篇内容,可以帮助大家 ...

  5. Java 模拟面试题

    1.面向对象的特点 继承,封装,多态 2.对象和类的区别是什么? 对象是对客观事物的抽象,类是对对象的抽象.类是一种抽象的数据类型,它们的关系是,对象是类的实例,类是对象的模板. 3.静态成员和实例成 ...

  6. 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 ...

  7. App开发:模拟服务器数据接口 - MockApi

    为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...

  8. 故障重现, JAVA进程内存不够时突然挂掉模拟

    背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...

  9. Python 爬虫模拟登陆知乎

    在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

随机推荐

  1. h5点击区域和实际区域对不上

    点击区域和实际区域对不上 然后点击后触发的其实是上面的区域,会导致事件触发错误

  2. c#基础 path 类的各种套路

    string str = @"C:\3000soft\Red Spider\Data\Message\老赵.wav"; //获得文件名 Console.WriteLine(Path ...

  3. linux 安装jdk (二进制文件安装)

    1.下载jdk 此处以1.7 为例 :jdk-7u79-linux-x64.tar.gz 2.通过ssh将安装介质传到服务器 我一般放在 /opt 目录下 3.用tar 命令解压缩   tar -zx ...

  4. zTree的重点

    今天学习了zTree插件,记录一下使用步骤: 1 下载,把下载好的目录整个放在项目中 文件夹目录: js:一般引这jquery.ztree.all.js和jquery.ztree.core.js cs ...

  5. centos7使用yum安装不了ffmpeg

    [root@localhost]# yum install ffmpeg Loaded plugins: fastestmirror Loading mirror speeds from cached ...

  6. ORA-02273: this unique/primary key is referenced by some foreign keys

    关于ORA-02273错误,以前还真没有仔细留意过.昨天遇到了这个问题,遂顺便总结一番,以后遇到这类问题就可以直接用下面方案解决.如下所示,我们首先准备一下测试环境. CREATE TABLE TES ...

  7. python+selenium之断言Assertion

    一.断言方法 断言是对自动化测试异常情况的判断. # -*- coding: utf-8 -*- from selenium import webdriver import unittest impo ...

  8. CMDB 数据加密 最终整合API验证+AES数据加密

    当CMDB运行在内网的时候,经过API验证的三关是没有问题的,但是如果运行在外网,有一个问题是,黑客截取后的访问速度比客户端快的时候还会造成数据泄露.为了解决这个问题,就要对数据进行加密 RSA加密 ...

  9. RuntimeError: cryptography is required for sha256_password or caching_sha2_p

    报错原因:mysql版本身份验证出现问题引起的 我这里报错的地方是在Django里,pycharm连接数据库时出现的 解决办法,安装安装cryptography即可:pip install crypt ...

  10. 阿里云服务器下安装LAMP环境(CentOS Linux 6.3)

    http://ninghao.net/course/514 http://www.sphinxsearch.org/archives/243 ctrl + l  putty 清理屏幕 apache 自 ...