POJ3573(模拟)
来源:互联网 发布:阿里云数据盘克隆 编辑:程序博客网 时间:2024/05/01 23:31
写起来有点爽~~
题意是给你一篇文章,让你把缩写词还原,其他的标点原样输出,缩写规则是保留头尾字母中间的所有字母换成一个他们长度对应的数字。完整词有三种(首字母大写,全都大写,全都小写),缩写词有三种(全都小写,首尾都大写,首字母大写尾字母小写)。
有好多坑点:
1.不要用sring,容易超时。
2.输入不区分大小写,也就是ABC和abc是一样的。
3.输出区分大小写,比如之前有读入ABBC这个单词,然后读到a2c应该输出abbc,读到A2c应该输出Abbc,读到A2C应该输出ABBC。
4.如果缩写词还原时产生歧义应该原样输出缩写词,比如前面有problem和program缩写都是p5m就分不清了,那就原样输出p5m。
5.如果出现没出现的缩写词就原样输出。
#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include <iostream>#include <vector>using namespace std;#define maxn 211#define INF 111111111#define left Left#define eps 1e-10struct node { char a[33][35];}gg[57][57];const char aa[] = {"morejarphone"};int f (char a) { if (a <= 'Z') return a-'A'+1; else return a-'a'+1;}bool biaodian (char ch) { if (ch <= 'z' && ch >= 'a') return 0; if (ch <= 'Z' && ch >= 'A') return 0; if (ch <= '9' && ch >= '0') return 0; return 1;}char daxie (char ch) { if (ch <= 'z' && ch >= 'a') return ch-'a'+'A'; return ch;}char xiaoxie (char ch) { if (ch <= 'Z' && ch >= 'A') return ch-'A'+'a'; return ch;}char cur[35];int main () { //freopen ("data.txt", "r", stdin); for (int i = 1; i <= 52; i++) { for (int j = 1; j <= 52; j++) { for (int k = 0; k <= 32; k++) gg[i][j].a[k][0] = '\0'; } } char ch; while ((ch = getchar ()) != EOF) { while (biaodian (ch)) { //前导标点 if (ch == EOF) goto out; printf ("%c", ch); ch = getchar (); } int len = 0, mid; while (!biaodian (ch)) { cur[len++] = ch; ch = getchar (); } cur[len] = '\0'; char pp[35]; for (int i = 0; i <= len; i++) pp[i] = xiaoxie (cur[i]); if (cur[1] <= '9' && cur[1] >= '0') { int i = 1, num = 0; while (cur[i] <= '9' && cur[i] >= '0') { num = num*10 + cur[i]-'0'; i++; } int x = f (pp[0]), y = f (pp[len-1]); if (strcmp (gg[x][y].a[num], aa) != 0 && strcmp (gg[x][y].a[num], "") != 0) { if (cur[0] <= 'Z' && cur[len-1] <= 'Z') { printf ("%c", cur[0]); for (int i = 1; i < strlen (gg[x][y].a[num])-1; i++) printf ("%c", daxie (gg[x][y].a[num][i])); printf ("%c", cur[len-1]); } else { printf ("%c", cur[0]); for (int i = 1; i < strlen (gg[x][y].a[num]); i++) printf ("%c", gg[x][y].a[num][i]); } } else { for (int i = 0; i < len; i++) printf ("%c", cur[i]); } } else { mid = len-2; int x = f (pp[0]), y = f (pp[len-1]); if (strcmp (gg[x][y].a[mid], "") == 0) { for (int i = 0; i <= len; i++) gg[x][y].a[mid][i] = pp[i]; } else if (strcmp (gg[x][y].a[mid], pp) != 0) { for (int i = 0; i <= strlen (aa); i++) gg[x][y].a[mid][i] = aa[i]; } for (int i = 0; i < len; i++) printf ("%c", cur[i]); } printf ("%c", ch); } return 0;}
0 0
- POJ3573(模拟)
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟:
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 一个并发程序开多少线程合适?
- [Python进阶-4]类的继承/多态/多重继承/任意多参数
- 浅谈android的selector,背景选择器
- jdbc数据库连接
- OpenCV 学习(图像的基本运算)
- POJ3573(模拟)
- java学习笔记]java语言基础概述之内存的划分&堆和栈
- POJ3259 Wormholes SPFA 或者 bellman_ford
- 多线程编程的基础知识
- 《C++primer(第五版)》学习之路-第十九章:特殊工具与技术
- poj2823 Sliding Window (优先队列)
- iOS 分享功能开发
- 灰度共生矩阵
- iOS--单例(Singleton)