描述:
「公子」在战斗时可以对一些敌人添加「断流」标记。
现在有 n 个排成一排的敌人,编号分别为 1~n。
每一轮攻击,「公子」会击败所有带有「断流」标记的敌人,并在该轮攻击结束后,将与这些敌人编号相邻且存活的敌人添加「断流」标记,发起下一轮攻击。若无剩余敌人,则不再发起攻击。
初始时,「公子」可以对其中最多 m 个敌人添加「断流」标记并发起攻击。
他想知道初始时对哪几个敌人添加「断流」标记可以使攻击轮数尽可能少。
当然,你初始时添加「断流」标记的敌人个数可以小于 m,你也可以对同一个敌人多次添加「断流」标记,但每次添加均消耗标记次数。
输入格式:
两个整数n,m.
输出格式:
第一行一个整数 k,表示你初始时添加「断流」标记的敌人个数。你需要保证 1<=k<=m。
第二行 k 个整数,表示初始时添加「断流」标记的敌人的编号。
你需要保证在所有方案中,你的方案的攻击轮数最少。任何合法的方案均可通过。
样例
【样例 1 输入】
7 2
【样例 1 输出】
2
6 2
【样例 2 输入】
11 5
【样例 2 输出】
4
2 5 10 7
【样例 3 输入】
131 4
【样例 3 输出】
4
50 17 115 82
【样例 4 输入】
3141592 6
【样例 4 输出】
6
1308998 2879795 785399 1832597 261800 2356196
数据范围与提示
本题开启自定义校验器(Special Judge)。
对于 100% 的数据,1<=m<=10^5,1<=n<=10^9,保证 m<=n。
我提交过后显示错误,有没有人帮我改写一下:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int a[n]={0},x=2,y=n-1;
for(int i=0;i<m;i+=2)
a[i]=x,a[i+1]=y,x+=2,y-=2;
for(int i=0;i<m;i++)
cout<<a[i]<<" ";
return 0;
}