题解:CF2031C Penchick and BBQ Buns

chenxi2009

2024-11-18 09:10:35

Solution

思路

$n$ 为奇数时,因为有一个数要出现三次,这三次两两之间的距离差显然得是一对勾股数的平方,最小时为 $3^2+4^2=5^2$。对应地需要在答案序列 $a$ 中 $a_1,a_{10},a_{26}$ 放上相同的数,因为没有更小的勾股数所以 $n<26$ 无解。\ $n\ge27$ 时,在 $a_{23},a_{27}$ 放上相同的数,被隔开来的空白区间长度都为偶数,用偶数的方法处理。 时间复杂度 $O(\sum n)$。 # 代码 ```cpp #include<bits/stdc++.h> using namespace std; int T,n,ans[200001]; int main(){ scanf("%d",&T); while(T --){ scanf("%d",&n); if(!(n & 1)){//偶数情况 for(int i = 1;i <= n / 2;i ++)printf("%d %d ",i,i); printf("\n"); } else if(n <= 26)printf("-1\n");//无解特判 else{//奇数情况 ans[1] = ans[10] = ans[26] = 1,ans[23] = ans[27] = 2; ans[2] = ans[3] = 3,ans[4] = ans[5] = 4; ans[6] = ans[7] = 5,ans[8] = ans[9] = 6; ans[11] = ans[12] = 7,ans[13] = ans[14] = 8; ans[15] = ans[16] = 9,ans[17] = ans[18] = 10; ans[19] = ans[20] = 11,ans[21] = ans[22] = 12; ans[24] = ans[25] = 13; for(int i = 1;i <= 27;i ++)printf("%d ",ans[i]); for(int i = 14;i <= n / 2;i ++)printf("%d %d ",i,i); printf("\n"); } } return 0; } ```