1142: 循环移动
时间限制: 1 Sec 内存限制: 128 MB
提交: 479 解决: 115
[提交][状态][讨论版]
题目描述
C函数支持对字符串进行多种操作,这里我们要实现一个新的操作,循环移动某字符串.以字符串”ABCD”为例,循环右移一位字符串变成”DABC”; 但是如果是循环左移一位就变成了”BCDA”.循环右移N位就是连续N次循环右移一位, 循环左移N位就是连续N次循环左移一位.
输入
输入由多个测试(不超过15)用例组成.每个测试用例包含两行, 第一行包含一个长度不超过100的字符串(不含空格)以及一个整数C(1<=C<=10), C表示循环移位操作的数目. 第二行由C个字符串组成,字符串之间用空格分开,每一个字符串都是一个字符后面跟一个整数(范围为0-100000),字符为L或R,表示循环左移或循环右移。例如“L100”表示循环左移100位。
输出
对于每一个测试用例,输出C次操作后的字符串,每个用例输出占据一行。
样例输入
ABCD 1
L2
ABCD 2
R2 L2
样例输出
CDAB
ABCD
提示
来源
CYH
[提交][状态][讨论版]
来源: http://acm.hnust.edu.cn/JudgeOnline/problem.php?id=1142
#include <cstdio>
#include <cstring>
#define max 100
char A[max+1];
int main()
{
while(~scanf("%s",A))
{
int n;scanf("%d",&n);
int R=0,L=0;
for(int i=1;i<=n;i++)
{
char C;int len;
while((C=getchar())!='R'&&C!='L');
scanf("%d",&len);
if(C=='R') R+=len;
else L+=len;
}
int X=R-L,L_A=strlen(A);
if(X>=0)
{
X%=L_A;
for(int i=L_A-X;i<L_A;i++) putchar(A[i]);
for(int i=0;i<L_A-X;i++) putchar(A[i]);
}
else
{
X=(-X%L_A);
for(int i=X;i<L_A;i++) putchar(A[i]);
for(int i=0;i<X;i++) putchar(A[i]);
}
putchar('\n');
}
return 0;
}