链接:https://ac.nowcoder.com/acm/contest/847/C
来源:牛客网
lililalala经过水果店的顺序是:
0→8→3→4→7→9→6→2→1→5 0→8→3→4→7→9→6→2→1→5
答案可能不止一种。
解析:
打表找规律,构造,发现n!=1&&n%2==1时输出-1,其他都有答案
打表代码:
#include<bits/stdc++.h>
#define MAXN 50005
using namespace std;
int a[MAXN],b[MAXN];
int vis[MAXN];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
a[i]=i;
do
{
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++)
b[i]=(a[i]+i)%n;
int flag=0;
for(int i=0,c=0;i<n;i++)
{
if(vis[c]==1)
{
flag=1;
break;
}
vis[c]=1;
c=b[c];
}
if(flag==0)
{
for(int i=0,c=0;i<n;i++)
{
cout<<c<<" ";
c=b[c];
}
cout<<endl;
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
cout<<endl;
}
}while(next_permutation(a,a+n));
return 0;
}
发现一定存在一个:
n-1,n-3,..3,1,0,2,4,...n的答案
ac:
#include<bits/stdc++.h>
#define MAXN 100005
using namespace std;
int a[MAXN],b[MAXN];
int main()
{
int n;
scanf("%d",&n);
if(n%2==1&&n!=1)
{
printf("-1\n");
}
else{
int c=n-1;
int d=n-2;
for(int i=0;i<n;i++)
{
if(i==n/2)
printf("0");
else if(c>=1)
{
printf("%d",c);
c=c-2;
}
else{
printf("%d",d);
d=d-2;
}
if(i<n-1)
printf(" ");
else
printf("\