求助
查看原帖
求助
413362
奋斗吧!少女楼主2021/11/12 16:36

小明的爸爸妈妈给了他n个立方体作为一套礼物。每个立方体有个数字ai写在上面,将所有立方体放在一排,然后去拆其他的礼物。这时,他的哥哥按照以下的规则重新排列了立方体:假设这些立方体被编号为1-n, 哥哥在第i步,会将第i个立方体到第 (n - i + 1) 个立方体整体反转,最初i=1,在i  ≤  n - i + 1时他会一直这样做。当做完这些操作, 哥哥就跑了。小明发现它们的顺序变了。

请凭借现在的立方体摆放顺序帮助小明把它们排回初始位置。

输入

7

4 3 7 6 9 1 2

输出

2 3 9 6 7 1 4

1<=n<=200000

这道题

#include<bits/stdc++.h>
using namespace std;
int n,i,cs,a[200010],b[200010],f[200010],s[200010];
void fz(int x,int y){
	int i,j;
	for(i=x;i<=y;i++)
	  f[i]=s[i];
	for(i=y,j=x;i>=x,j<=y;i--,j++)
	  s[i]=f[j];
}
int main(){
	scanf("%d",&n);
	if(n%2==0){
		cs=n/2;
	}
	else{
		cs=n/2+1;
	}
	for(i=1;i<=cs;i++){
		a[i]=i;
		b[i]=n-i+1;
	}
	for(i=1;i<=n;i++)  
	  scanf("%d",&s[i]);
	for(i=cs;i>=1;i--){
		memset(f,0,sizeof(f));
		fz(a[i],b[i]);
	}
	for(i=1;i<=n;i++)  
	  printf("%d ",s[i]);
}

超时 请问如何改进

2021/11/12 16:36
加载中...