P1098 [NOIP2007 提高组] 字符串的展开
题目链接
题目思路
模拟,注意记录偏移量来去掉 ''-''
题目代码
最傻的模拟
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 110;
int p1, p2, p3;
int main()
{
cin >> p1 >> p2 >> p3;
string s;
cin >> s;
int cnt = 0;
string t = "";
for(int i = 0; i < s.size(); i ++ )
{
t += s[i];
if(s[i] == '-')
{
if((s[i - 1] >= 'a' && s[i - 1] <= 'z') && (s[i + 1] >= 'a' && s[i + 1] <= 'z'))
{
if(s[i - 1] < s[i + 1])
{
t.erase(i + cnt);
if(p1 == 1)
{
string tmp = "";
int l = s[i - 1] - 'a', r = s[i + 1] - 'a';
for(int j = l + 1; j < r; j ++ )
{
for(int k = 0; k < p2; k ++ )
{
char c = j + 'a';
tmp += c;
}
}
cnt += tmp.size() - 1;
if(p3 == 1) t += tmp;
else if(p3 == 2)
{
reverse(tmp.begin(), tmp.end());
t += tmp;
}
}
else if(p1 == 2)
{
string tmp = "";
int l = s[i - 1] - 'a', r = s[i + 1] - 'a';
for(int j = l + 1; j < r; j ++ )
{
for(int k = 0; k < p2; k ++ )
{
char c = j + 'A';
tmp += c;
}
}
cnt += tmp.size() - 1;
if(p3 == 1) t += tmp;
else if(p3 == 2)
{
reverse(tmp.begin(), tmp.end());
t += tmp;
}
}
else if(p1 == 3)
{
string tmp = "";
int l = s[i - 1] - 'a', r = s[i + 1] - 'a';
for(int j = l + 1; j < r; j ++ )
{
for(int k = 0; k < p2; k ++ )
{
char c = '*';
tmp += c;
}
}
cnt += tmp.size() - 1;
if(p3 == 1) t += tmp;
else if(p3 == 2)
{
reverse(tmp.begin(), tmp.end());
t += tmp;
}
}
}
}
if((s[i - 1] >= '0' && s[i - 1] <= '9') && (s[i + 1] >= '0' && s[i + 1] <= '9'))
{
if(s[i - 1] < s[i + 1])
{
t.erase(i + cnt);
if(p1 == 1 || p1 == 2)
{
string tmp = "";
int l = s[i - 1] - '0', r = s[i + 1] - '0';
for(int j = l + 1; j < r; j ++ )
{
for(int k = 0; k < p2; k ++ )
{
char c = j + '0';
tmp += c;
}
}
cnt += tmp.size() - 1;
if(p3 == 1) t += tmp;
else if(p3 == 2)
{
reverse(tmp.begin(), tmp.end());
t += tmp;
}
}
else if(p1 == 3)
{
string tmp = "";
int l = s[i - 1] - '0', r = s[i + 1] - '0';
for(int j = l + 1; j < r; j ++ )
{
for(int k = 0; k < p2; k ++ )
{
char c = '*';
tmp += c;
}
}
cnt += tmp.size() - 1;
if(p3 == 1) t += tmp;
else if(p3 == 2)
{
reverse(tmp.begin(), tmp.end());
t += tmp;
}
}
}
}
}
}
cout << t << endl;
return 0;
}
一些省略上面操作的函数
1、s.erase(x,y) 表示将字符串s从x位置起删除y个字符
2、s.insert(x,y) 表示将字符串y(或字符y)插入到s的x位置处
3、s.push_back(x) 表示在s的末尾插入字符x
4、reverse(s.begin(),s.end()) 将字符串s翻转
作者:vacilie
出处:https://www.cnblogs.com/vacilie/p/16005083.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库