|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
新生入学后,图书馆将
N
N 本书摆在一条书架上。书的编号为
1
,
2
,
…
,
N
1,2,…,N。
目前,这些书的顺序可能是乱的。管理员希望通过调整书的位置,使书架最终变为:第
1
1 个位置放编号
1
1 的书,第
2
2 个位置放编号
2
2 的书,依次类推。
书架前安装了一台轨道机械臂。每次操作时,小蓝可以选择三个连续的位置,机械臂会交换第一个位置和第三个位置上的书,中间位置上的书保持不动。
例如,当前书架顺序为
1
,
2
,
3
,
4
,
5
1,2,3,4,5。选择第
2
2 至第
4
4 个位置后,编号为
2
2 和
4
4 的书会交换,书架变为
1
,
4
,
3
,
2
,
5
1,4,3,2,5。
现在给出书架上
N
N 本书的当前顺序,请你计算,至少需要进行多少次操作,才能将书架恢复为
1
,
2
,
…
,
N
1,2,…,N 的顺序。如果无论如何都无法完成,输出
−
1
−1。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int n ;
scanf("%d",&n);
long long a[100005];
for(int i = 0; i < n; i++)
{
scanf("%lld", &a[i]);
if(a[i] % 2 != (i + 1) % 2)
break;
printf("-1");
return 0;
}
long long ans = 0;
for(int j = 0; j < n - 2; j++)
{
for(int i = 0; i < n - 2; i++)
if(a[i] > a[i + 2])
{
long long t = a[i];
a[i] = a[i + 2];
a[i + 2] = t ;
ans++;
}
}
printf("%lld", ans);
return 0;
} |
|