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 ...
随机推荐
- SQLITE 多进程查询出错database is locked
程序比较简单: 父进程查询数据库A表,没有更新操作 子进程同时查询数据库A表,查询出来的内容更新B表. 两个进程都放到while(1)循环中,速度慢的话就是2S执行一次就没有错,执行的速度快的话就会报 ...
- perl5 第八章 子程序
第八章 子程序 by flamephoenix 一.定义二.调用 1.用&调用 2.先定义后调用 3.前向引用 4.用do调用三.返回值四.局部变量五.子程序参数传递 1.形式 2 ...
- Effective C++ 第二版 10) 写operator delete
条款10 写了operator new就要同时写operator delete 写operator new和operator delete是为了提高效率; default的operator new和o ...
- 从一个App跳转到另一个App
在跳入App的info中配置Bundle identifier 在跳入App的info中配置URL Schemes 在另一个应用程序中按照上边的操作添加openURL并运行,就可以跳转了 调用open ...
- c语言实现tree数据结构
该代码实现了tree的结构.依赖dyArray数据结构.有first一级文件夹.second二级文件夹. dyArray的c实现參考这里点击打开链接 hashTable的c实现參考这里点击打开链接 ...
- Jenkins持续集成相关文章整理
构建iOS持续集成平台(一)——自动化构建和依赖管理 构建iOS持续集成平台(二)——测试框架 构建iOS持续集成平台(三)——CI服务器与自动化部署 使用Jenkins搭建iOS开发的CI服务器 一 ...
- MySQL 5.7.14 安装
http://www.cnblogs.com/zcGu/articles/5740936.html 因笔者个人需要需要在本机安装Mysql,先将安装过程记录如下,希望对他人有所参考. 一, 1, 进入 ...
- 五毛的cocos2d-x学习笔记04-触摸点
Touch position是屏幕坐标系中的点,OpenGL position是cocos2d-x用到的OpenGL坐标系上的点坐标.所以就需要将touch的坐标转换成OpenGL坐标系中的点坐标. ...
- java覆写equals方法
何时需要重写equals() 当一个类有自己特有的“逻辑相等”概念(不同于对象身份的概念). object规范规定,如果要重写equals(),也要重写hashcode() 如何覆写equals() ...
- [LeetCode]题解(python):020-Valid Parentheses
题目来源: https://leetcode.com/problems/valid-parentheses/ 题意分析: 这道题输入一段只包括括号的字符串,判断这个字符串是否已经配对.配对的规则是,每 ...