小小的分讨题。
偶数
如果 n 为偶数,输出 1 1 2 2 3 3
\dots,每组间隔均为 1。
奇数
如果 n 为奇数,上面的方法会多出一个,考虑改造算法。
由于允许有两个以上同种面包,我们可以放置 3 个 1 号面包,剩下总数仍为偶数,如上即可。
三个面包的位置不能乱放。设第一个 1 号面包的坐标为 x,第二个为 y,第三个为 z,就要满足:
终于结束了吗?没有,第一和第二个 $1$ 号面包间隔 $8$ 格,能填充满,但第二和第三个之间间隔 $15$ 格,填不满。那该怎么办?
为什么一定要放里面呢?我们可以拆开一组,一个放里面,一个放外面,就填满了。
### 代码时间:
```cpp
#include<bits/stdc++.h>
using namespace std;
int t, n;
int main(){
cin >> t;
while(t --){
cin >> n;
if((n & 1) && (n < 27)){//下面的表长 27 个数字,不够就无解
cout << "-1\n";
}
else if(n & 1){
cout << "1 2 2 3 3 4 4 5 5 1 6 6 7 7 8 8 9 9 10 10 11 11 13 12 12 1 13 ";//注意拆掉 13,使其刚好填满
for(int i = 14; i * 2 <= n; i ++) cout << i << " " << i << " ";//接着 14 填
cout << "\n";
}
else{
for(int i = 1; i * 2 <= n; i ++) cout << i << " " << i << " ";//偶数直接填
cout << "\n";
}
}
return 0;
}
```