题意:
有一行n个坦克
每个坦克两格血 炸他们一次他们就往旁边格子移动一格
第一格的坦克只能往第二格移动 最后一格的坦克只能往倒数第二格移动
问怎么才能炸死所有坦克
思路:
举个例子 比如我们现在有6个坦克 每个坦克两格血
[2 2 2 2 2 2] 我们先炸偶数的坦克 偶数坦克减一格血往奇数格挪
2 0 2 0 2 0
[1 0 1 0 1 0] 于是奇数格有1血和2血的坦克
再炸一次奇数格子 那些1血的坦克就gg了 2血的坦克往偶数格挪
[0 1 0 1 0 1] 于是变成了只剩偶数格有1血的坦克
再炸一次偶数格子就完事了
代码:
(n>=2所以可以先输出个2)
看别的题解他们的ans公式是n/2+ans
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, ans;
scanf("%d", &n);
if(n & 1) {
ans = n/2*3+1;
} else {
ans = n/2*3;
}
printf("%d\n", ans);
printf("2");
for(int i = 4; i <= n; i++) {
if(!(i & 1)) {
printf(" %d", i);
}
}
for(int i = 1; i <= n; i++) {
if(i & 1) {
printf(" %d", i);
}
}
for(int i = 2; i <= n; i++) {
if(!(i & 1)) {
printf(" %d", i);
}
}
}