这段代码在我的计算机上运行没有任何报错,样例也全部通过,但提交结果是所有数据全部RE,谁能告诉我代码出了什么问题
#include<iostream>
#include<cstring>
using namespace std;
int pos[20]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int useq[10][10]={{-1},{9},
{-1},{4,10,11},
{-1},{1,5,6,12,13},
{-1},{0,2,3,7,8,14,15}};
int dseq[10][10]={{-1},{15},
{-1},{13,14,8},
{-1},{11,12,6,7,3},
{-1},{9,10,4,5,1,2,0}};
int rseq[10][10]={{-1},{0},
{-1},{3,2,1},
{-1},{8,7,6,5,4},
{-1},{15,14,13,12,11,10,9}};
int op(char dir,int num)//转动操作
{
if(dir=='U')
for(int i=0;i<16;i++)//循环位置序列中每一个数字
for(int j=0;j<num;j++)//循环遍历被操作的数字位置
if(pos[i]==useq[num][j])
{
pos[i]=useq[num][(j+num-1)%num];
break;
}
if(dir=='R')
for(int i=0;i<16;i++)//循环位置序列中每一个数字
for(int j=0;j<num;j++)//循环遍历被操作的数字位置
if(pos[i]==rseq[num][j])
{
pos[i]=rseq[num][(j+num-1)%num];
break;
}
if(dir=='D')
for(int i=0;i<16;i++)//循环位置序列中每一个数字
for(int j=0;j<num;j++)//循环遍历被操作的数字位置
if(pos[i]==dseq[num][j])
{
pos[i]=dseq[num][(j+num-1)%num];
break;
}
}
void print()
{
int printseq[20];
for(int i=0;i<16;i++)
printseq[pos[i]]=i;
for(int i=0;i<16;i++)
printf("%c",char(printseq[i]+'A'));
}
int loop[20][20];//存储循环
int count=0;//循环个数
int len[20]={};//各个循环长度
int inloop[20]={};//判断是否在循环中
void findloop()
{
for(int i=0;i<16;i++)
if(inloop[i]==0)
{
inloop[i]=1;
int curnum=pos[i];
len[count]=0;
loop[count][len[count]]=curnum;
while(inloop[curnum]==0)
{
inloop[curnum]=1;
curnum=pos[curnum];
len[count]++;
loop[count][len[count]]=curnum;
}
len[count]++;
count++;
}
}
int powermod(int a,int b,int m)//计算a的b次幂除以m的余数
{
int r=1;
while(b)
{
if(b&1)
r=(r*a)%m;
b>>=1;
a=a*a%m;
}
return r;
}
int main()
{
char opseq[500];
int a,b;
scanf("%s",&opseq);
int l=strlen(opseq);
for(int i=0;i<l;i+=2)
op(opseq[i],opseq[i+1]-'0');
scanf("%d%d",&a,&b);
findloop();
for(int i=0;i<count;i++)
{
int shift=powermod(a,b,len[i]);
for(int j=0;j<len[i];j++)
pos[loop[i][j]]=loop[i][(j+len[i]+shift)%len[i]];
}
print();
return 0;
}