链接

[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;
}

最新文章

  1. 【转载-pdcxs007】 Windows7配置CTex+Texmaker
  2. mysql重点--执行计划
  3. Python网络爬虫Scrapy框架研究
  4. phalcon几种分页方法
  5. JS初学之-代码精简思路
  6. linux中sudoers别名规则
  7. 搜索(剪枝优化):HDU 5113 Black And White
  8. sql按照in中的顺序进行排序 mysql
  9. MATLAB cell 数组介绍
  10. codeforces 547B. Mike and Feet 单调栈
  11. C++ : 类型的别名和对象的别名
  12. YII 1.0 (7) 登录信息调取 session使用
  13. 各种选择框jQuery的选中方法
  14. Spring 事务管理笔记
  15. HTTP 协议详解(超级经典)-转
  16. Linux下的C----多进程与多线程
  17. centos7 下安装mysql教程
  18. 4-17疑难点 c语言之【结构体对齐】
  19. virtualBox linux centos 挂载u盘 解决乱码
  20. Django FBV/CBV、中间件、GIT使用

热门文章

  1. Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(二)
  2. spark问题
  3. 用php输出心形曲线
  4. Xamarin for Visual Studio下载后的文件路径
  5. AngularJS处理服务器端返回的JSON数据的格式问题
  6. C# MessageBox自动关闭
  7. php+ajax实现登录按钮加载loading效果
  8. 记一次与iframe之间的抗争
  9. 转摘app测试方法总结
  10. 如何设置Oracle数据库客户端字符集以及系统中的NLS_LANG环境变量