Codeforces 877C Slava and tanks(思维)

题目链接:http://codeforces.com/problemset

题目大意:有n个格子,某些格子里可能有一个或多个坦克,但不知道具体位置,每个坦克被轰炸一次就会移动到相邻的格子里(第1个格子只能往第2个格子移动,第n个格子只能往第n-1个格子移动),被轰炸两次就会报废,问最少需要轰炸几次才能保证所有坦克全部报废,请输出轰炸的位置。

解题思路:其实就是先把1~n所有的偶数输出,再输出所有的奇数,再输出所有的偶数。因为通过题意可以知道我们需要让坦克出现在任意格子中都要被轰炸两次,才能保证摧毁所有坦克,也就是我们要轰炸每个格子,在每个被轰炸格子之后还要有两个相邻的格子被轰炸(1,n后只要一个),然后可以发现奇数的格子后需要两个偶数格子,偶数格子后需要一个奇数和一个偶数格子,所以得到规律按偶、奇、偶规律输出即可。

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 const int N=1e5+5;
 6 
 7 int main(){
 8     int n;
 9     scanf("%d",&n);
10     printf("%d
",n/2*2+(n-n/2));
11     for(int i=2;i<=n;i+=2){
12         printf("%d ",i);
13     }
14     for(int i=1;i<=n;i+=2){
15         printf("%d ",i);
16     }
17     for(int i=2;i<=n;i+=2){
18         printf("%d ",i);
19     }
20     return 0;
21 }
原文地址:https://www.cnblogs.com/fu3638/p/7731989.html