ZOJ 3490 String Successor 字符串处理
一道模拟题,来模拟进位
暴力的从右往左扫描,按规则求后继就好了。除了Sample已给出的,还有一些需要注意的地方:
- 9的后继是10,而不是00;
- (z)的后继是(aa),而不是a(a);
- 输入虽然最长只有100,但输出最长可能有102。
事实上题目中给的字符串后继规则,也是Ruby中String#succ或String#next所用的规则
http://blog.watashi.ws/1944/the-8th-zjpcpc/
标程也写的非常好
//#pragma comment(linker, "/STACK:16777216") //for c++ Compiler
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <cstring>
#include <cmath>
#include <stack>
#include <string>
#include <map>
#include <set>
#include <list>
#include <queue>
#include <vector>
#include <algorithm>
#define Max(a,b) (((a) > (b)) ? (a) : (b))
#define Min(a,b) (((a) < (b)) ? (a) : (b))
#define Abs(x) (((x) > 0) ? (x) : (-(x)))
#define MOD 1000000007
#define pi acos(-1.0) using namespace std; typedef long long ll ;
typedef unsigned long long ull ;
typedef unsigned int uint ;
typedef unsigned char uchar ; template<class T> inline void checkmin(T &a,T b){if(a>b) a=b;}
template<class T> inline void checkmax(T &a,T b){if(a<b) a=b;} const double eps = 1e- ;
const int N = ;
const int M = * ;
const ll P = 10000000097ll ;
const int MAXN = ; string str;
int n; bool exist () {
for (int i = ; i < str.size(); ++i) {
if (str[i] >= 'a' && str[i] <= 'z' || str[i] >= 'A' && str[i] <= 'Z' || str[i] >='' && str[i] <= '') return true;
}
return false;
} bool exist (char ch) {
return ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' || ch >= '' && ch <='';
} int main(){
std::ios::sync_with_stdio(false);
int i, j, t, k, u, v, numCase = ;
int flag; cin >> t;
while (t--) {
cin >> str >> n;
while (n--) {
if (exist ()) {
flag = ;
for (i = str.size () - ; i >= ; --i) {
if (exist (str[i])) {
if (str[i] == '' || str[i] == 'Z' || str[i] == 'z') {
for (j = ; j < i; ++j) {
if (exist (str[j])) break;
}
if (j == i && j != ) { if (str[i] == '') {
flag = ;
str[i] = '';
} else if (str[i] == 'Z') {
flag = ;
str[i] = 'A';
} else if (str[i] == 'z') {
flag = ;
str[i] = 'a';
} if (flag) {
if ( == flag) {
string tmp;
for (k = ; k < i; ++k) tmp.push_back(str[k]);
tmp.push_back('');
for (k = i; k < str.size(); ++k) tmp.push_back(str[k]);
str = tmp;
}
if ( == flag) {
string tmp;
for (k = ; k < i; ++k) tmp.push_back(str[k]);
tmp.push_back('A');
for (k = i; k < str.size(); ++k) tmp.push_back(str[k]);
str = tmp;
}
if ( == flag) {
string tmp;
for (k = ; k < i; ++k) tmp.push_back(str[k]);
tmp.push_back('a');
for (k = i; k < str.size(); ++k) tmp.push_back(str[k]);
str = tmp;
}
}
flag = ; break;
} else {
if (str[i] == '') {
flag = ;
str[i] = '';
} else if (str[i] == 'Z') {
flag = ;
str[i] = 'A';
} else if (str[i] == 'z') {
flag = ;
str[i] = 'a';
}
}
} else {
flag = ;
++str[i]; break;
}
}
} if (flag) {
if ( == flag) {
string tmp;
tmp.push_back('');
for (i = ; i < str.size(); ++i) tmp.push_back(str[i]);
str = tmp;
}
if ( == flag) {
string tmp;
tmp.push_back('A');
for (i = ; i < str.size(); ++i) tmp.push_back(str[i]);
str = tmp;
}
if ( == flag) {
string tmp;
tmp.push_back('a');
for (i = ; i < str.size(); ++i) tmp.push_back(str[i]);
str = tmp;
}
} cout << str << endl;
} else {
++str[str.size () - ];
cout << str << endl;
}
} cout << endl;
} return ;
}
ZOJ 3490 String Successor 字符串处理的更多相关文章
- ZOJ 3490 String Successor
点我看题目 题意 : 给你一个字符串,让你按照给定规则进行处理. 如果字符串里有字母或者是数字就忽略非字符数字,如果没有,就让最右边的那个字符+1. 增量都是从最右边的字母或者数字开始的. 增加一个数 ...
- ZOJ 3490 String Successor(模拟)
Time Limit: 2 Seconds Memory Limit: 65536 KB The successor to a string can be calculated by applying ...
- ZOJ——String Successor(字符串模拟题目)
ZOJ Problem Set - 3490 String Successor Time Limit: 2 Seconds Memory Limit: 65536 KB The succes ...
- .NET面试题解析(03)-string与字符串操作
系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 字符串可以说是C#开发中最常用的类型了,也是对系统性能影响很关键的类型,熟练掌握字符串的操作非常重要. 常 ...
- [CareerCup] 1.2 Reverse String 翻转字符串
1.2 Implement a function void reverse(char *str) in C or C++ which reverses a null-terminated string ...
- char型字符串(数组)与string型字符串 指针与引用
一.常指针: int *const p; //指针不可改变,但是指针指向的数据可以改变. 指向常量的指针: const int *p; //指针可以改变,但是指针指向的数据不可以改变. 指 ...
- Java基础知识强化59:String(字符串)和其他类型的相互转化
1. String类型 ---> 其他类型 (1)使用基本类型包装类的parseXXX方法 e.g:String(字符串)转化为int(整型) String MyNumber ="12 ...
- String[255]在高版本Delphi里还是被解释成Byte,总体长度256,使用StrPCopy可以给Array String拷贝字符串(内含许多实验测试)
学了好多不了解的知识: procedure TForm1.Button1Click(Sender: TObject); var s1 : String; s2 : String[]; begin s1 ...
- JavaScript String(字符串对象)
String 对字符串的支持 String.charAt( n ) 返回字符串中的第n个字符 n 是下标 String.charCodeAt( ) 返回字符串中的第n个字符的代码 String.con ...
随机推荐
- 11-C语言指针
目录: 一.指针 二.指针与数组 回到顶部 一.指针 1 内存被分为字节,每个字节有唯一地址,指针保存的是内存中的地址. 2 保存指针的变量,就叫指针变量,(保存地址) 3 声明一个指针变量 int ...
- PICC国际标准ISO14443下载
ISO 14443:第一部分规定了PICC的物理特性.接近卡(PICC)国际标准ISO14443-1点击下载 ISO 14443:第二部分规定了PICC的射频功率和信号接口. 接近卡(PICC)国际标 ...
- 阻止系统自动睡眠的小软件,附C#制作过程
原文 http://www.cnblogs.com/h46incon/p/SleepPreventer.html 因为有时下载东西的时候,不想让电脑自动深入睡眠,所以就开启了离开模式.这样不但不节能环 ...
- android中使用setVideoURI()播放视频
最近在做一个demo,要求播放视频,记录一下.使用的是VideoView控件,如果播放网络视频的话,视频应该是渐进流式的,格式嘛,大家应该都知道,一般是H.263或者H.264格式的扩展名为3gp或者 ...
- MB_CHANGE_DOCUMENT使用方法
REFRESH IT_MSEG. CLEAR IT_MSEG. SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_MSEG ...
- Swift:使用系统AVFoundation实现二维码扫描和生成
系统提供的AVCaptureSession仅仅适用于iOS7.0以上的系统.之前的请用Zbar来替代 下载地址:http://download.csdn.net/detail/huobanbengku ...
- 拿出来分享了!VIP珍藏!!!全网最齐全的 DEDECMS模板 全盘下载地址列表!没有你找不到的!
拿出来分享了!VIP珍藏!!!全网最齐全的 DEDECMS模板 网盘地址!没有你找不到的! 模板类型最齐全: ----------------------优美的走起!------------ 一:DE ...
- golang(2):beego 环境搭建
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/46695513 转载请一定注明出处. 1,关于beego beego是一个用Go开 ...
- ADO.NET(一) 空间 ADO.NET结构 命名空间(车延禄) System.Data—— 所有的一般数据访问类 S(转载)
ADO.NET(一) 空间 ADO.NET结构 命名空间(车延禄)System.Data—— 所有的一般数据访问类System.Data.Common—— 各个数据提供程序共享(或重写)的类Sys ...
- json与字符串互转
1 字符串转JSON var obj=eval('('+str+")') var obj=JSON.parse(str) var obj=str.parseJSON() 2 JSON转字符串 ...