首页 > 代码库 > [luoguP1098] 字符串的展开(模拟)
[luoguP1098] 字符串的展开(模拟)
传送门
一个模拟。
代码
#include <cstdio>#include <cstring>#include <iostream>#define isword(x) ((x) >= ‘a‘ && (x) <= ‘z‘)#define swap(x, y) ((x) ^= (y) ^= (x) ^= (y))int n, p1, p2, p3, add, d, start, end;char s[1000001];int main(){ int i, j, k; scanf("%d %d %d", &p1, &p2, &p3); scanf("%s", s + 1); n = strlen(s + 1); for(i = 1; i <= n; i++) { if(s[i] != ‘-‘ || i == 1 || i == n || (isword(s[i - 1]) && isdigit(s[i + 1])) || (isdigit(s[i - 1]) && isword(s[i + 1])) || (s[i] == ‘-‘ && (s[i - 1] == ‘-‘ || s[i + 1] == ‘-‘))) putchar(s[i]); else { if(s[i - 1] + 1 == s[i + 1]) continue; if(s[i - 1] >= s[i + 1]) { putchar(‘-‘); continue; } add = 0; d = 1; start = s[i - 1] + 1; end = s[i + 1]; if(p3 == 2) swap(start, end), start -= 1, end -= 1, d = -1; if(p1 == 3) { for(j = 1; j <= p2; j++) for(k = start; k != end; k += d) putchar(‘*‘); continue; } if(isword(s[i - 1]) && p1 == 2) add -= 32; for(k = start; k != end; k += d) for(j = 1; j <= p2; j++) putchar(k + add); } } return 0;}
[luoguP1098] 字符串的展开(模拟)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。