求助这个无中生有的RE
查看原帖
求助这个无中生有的RE
115169
Simplay楼主2024/7/24 00:21

这段代码在我的计算机上运行没有任何报错,样例也全部通过,但提交结果是所有数据全部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;
} 
2024/7/24 00:21
加载中...