String Successor zoj 3490
2024-10-19 04:22:04
链接
[https://vjudge.net/contest/294259#problem/D]
题意
就是给你一个字符串,要进行n次操作
让你输出每次的字符串
操作规则:
1.如果有数字或者字母就忽略其他的字符
否则最后面的字符就加一
2.如果存在进位,就往离当前最近的数字或者字母进位
z-a, Z-A, 9-0
如果不存在数字或者字母就在当前位置前面增加进位
分析
就是上面的规则模拟。我真的怕这种模拟。
有点麻烦。关键就是进位的情况判断就好了
然后他有可能一次操作连续进位几次,就递归一直到不能进位为止
我分析的复杂度没有问题,提交一直TLE,第二天弄个好久才发现换行因为是cout<<endl
如果我改成cout<<"\n"就过了。气屎我了,下次一定要慎用cin,cout
记住了
代码
#include<bits/stdc++.h>
using namespace std;
void go(string &s,int cur){
if(isalnum(s[cur])){
if(s[cur]=='Z'||s[cur]=='z'||s[cur]=='9'){
int j=cur-1;
while(j>=0&&!isalnum(s[j]))
j--;
if(j<0){
if(s[cur]=='z') s[cur]='a',s.insert(cur,"a");
else if(s[cur]=='Z') s[cur]='A',s.insert(cur,"A");
else if(s[cur]=='9') s[cur]='0',s.insert(cur,"1");
}
else {
if(s[cur]=='z') s[cur]='a';
else if(s[cur]=='Z') s[cur]='A';
else if(s[cur]=='9') s[cur]='0';
go(s,j);
}
}
else {
s[cur]++; return;
}
}
else{
s[cur]++; return;
}
}
int main(){
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int t,n; string s;
cin>>t;
while(t--){
cin>>s>>n;
for(int i=0;i<n;i++){
int cur=-1;
for(int k=s.length()-1;k>=0;k--)
if(isalnum(s[k])){
cur=k; break;
}
if(cur==-1) cur=s.length()-1;
go(s,cur);
cout<<s<<"\n";
}
cout<<"\n";
}
return 0;
}
最新文章
- 【转载-pdcxs007】 Windows7配置CTex+Texmaker
- mysql重点--执行计划
- Python网络爬虫Scrapy框架研究
- phalcon几种分页方法
- JS初学之-代码精简思路
- linux中sudoers别名规则
- 搜索(剪枝优化):HDU 5113 Black And White
- sql按照in中的顺序进行排序 mysql
- MATLAB cell 数组介绍
- codeforces 547B. Mike and Feet 单调栈
- C++ : 类型的别名和对象的别名
- YII 1.0 (7) 登录信息调取 session使用
- 各种选择框jQuery的选中方法
- Spring 事务管理笔记
- HTTP 协议详解(超级经典)-转
- Linux下的C----多进程与多线程
- centos7 下安装mysql教程
- 4-17疑难点 c语言之【结构体对齐】
- virtualBox linux centos 挂载u盘 解决乱码
- Django FBV/CBV、中间件、GIT使用