1 条题解
-
0
自动搬运
来自洛谷,原作者为

fish_love_cat
「要毁灭世界,根本不需要邪恶。起初,那些都是不会被任何人怪罪的小小愿望。而那样的愿望却如此轻易地,和末日相连在一起。」搬运于
2025-08-24 23:14:53,当前版本为作者最后更新于2025-04-26 19:35:13,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
Upd:改了一些胡言乱语的部分,比如倒闭了。
整场最简单的。
注意到最后剩下的一定是整个数列的平均值。
由于是一个排列,所以要得到这个值最简单的一个方法是让第 大值和第 小值取平均。
于是我们把第 大值和第 小值两两分组,在选中过程中整组整组的选即可。
但是当 是奇数时注意到会多出一位,此时选择的只能是数列的平均值,否则值会取错。然而如果数列平均值为小数不在序列中,那就无解。
还有就是反复选中显然不会有什么影响,本题不需要最小化步数,所以怎么构造都是对的。
还有一种无解的情况是 ,判掉即可。
代码易于实现。
#include<bits/stdc++.h> using namespace std; void solve(){ int n,m; cin>>n>>m; if(n==1){ puts("0"); return; } if(m==1){ puts("-1"); return; } if(!(n&1)&&(m&1)){ puts("-1"); return; } int flc=(n-m)/2+1; cout<<flc<<'\n'; for(int i=1;i<=flc;i++){ if(m&1)cout<<n/2+1<<' '; for(int j=2;j<=m;j+=2) cout<<j/2+i-1<<' '<<n+1-(j/2+i-1)<<' '; puts(""); } } signed main(){ int t; cin>>t; while(t--) solve(); return 0; }
- 1
信息
- ID
- 11338
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者