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 ...
随机推荐
- Git使用方法记录(一)
记录下git的基本使用方法,这里是以ubuntu14.04为例. 1,使用前的初始设置 git config –global user.name “FirstName LastName” git co ...
- document.compatMode简介
对于document.compatMode,很多朋友可能很少接触,知道他的存在却不清楚他的用途.今天在ext中看到 document.compatMode的使用,感觉这个对于我们开发兼容性的web页面 ...
- MySQL DBA成长之路
http://blog.51cto.com/zt/579 :GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'm ...
- MinGW 编译zlib、libpng、libjpeg、libcurl等(全都是Qt项目)
MinGW 这里使用的是Qt5自带的MinGw版本,将路径D:\Qt\Qt5.1.0\Tools\mingw48_32\bin加到"环境变量"→"系统变量"→& ...
- android天气查询(一)websevice之ksoap2软件包的使用
对于用到天气信息,首先我想: 第一:数据不可能是我测得的,必须是网上的信息. 第二:网上的信息分为好多种,具体哪种比较好一点,这里我总结了两种. 第三:数据JSON怎么解析. 第四:如何提出数据与显示 ...
- Memcached源代码分析 - Memcached源代码分析之消息回应(3)
文章列表: <Memcached源代码分析 - Memcached源代码分析之基于Libevent的网络模型(1)> <Memcached源代码分析 - Memcached源代码分析 ...
- 【企业库6】【日志应用程序块】实验2:创建和使用异步Trace Listener
Lab 2: Create and Use an Asynchronous Trace Listener 实验2:创建和使用异步Trace Listener In this lab, you will ...
- js设置奇偶行数样式
$(document).ready(function () { odd = { "background": "none" }; //奇数样式 even = { ...
- js调用.net后台
<head runat=server> <script type="text/javascript"> $(function () { var js_tim ...
- C#中类的运用(Eighth day)
又到了总结知识的时刻了,今天在云和学院学习了类的运用,下面是今天所学知识的总结: 理论: 类的定义语法: [访问修饰符] class 类名 { 成员; // 1.通过字段来描述类别信息的变量 ... ...