题解:CF2031C Penchick and BBQ Buns
偶数情况很简单,两个两个放就可以了,重点是奇数情况。
首先,如果要放奇数个,一定有至少一个数出现了奇数次。
其次,如果这个数出现了超过三次,因为放三个的约束条件小于放更多个,所以可以把多出来的那些给换成别的成对的数。
那么情况就转化成了如何放下三个同一个数。一旦放下同一个数三次,后面的就可以直接按照偶数的方法无脑放,所以考虑如何在最短的长度内放满
设这个数三次分别出现在位置
这一段的长度为
1 _ _ _ _ _ _ _ _ 1 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1
前一半有
1 2 2 3 3 4 4 5 5 1 6 6 7 7 8 8 9 9 10 10 12 11 11 1 12
这样,只用
然后就做出来了:
int main()
{
int T; read(T);
while(T--)
{
int n; read(n);
if(n&1)
{
if(n<27) puts("-1");
else
{
printf("1 2 2 3 3 4 4 5 5 1 6 6 7 7 8 8 9 9 10 10 12 11 11 1 12 ");
for(int i=1;i<=(n-27)>>1;i++)
write(i+14,' '),write(i+14,' ');
putchar('\n');
}
}
else
{
for(int i=1;i<=n>>1;i++)
write(i,' '),write(i,' ');
putchar('\n');
}
}
return 0;
}