Codeforces 873D Merge Sort
来源:互联网 发布:霍光为什么不篡位知乎 编辑:程序博客网 时间:2024/06/09 23:55
题意:
构造一个1到n的排列,使的这个排列进行归并排序时,递归的次数为k。
题解:
构造法。手动画图可以发现规律,每次递归排序总是会分成两部分,因此答案只有是1,3,5,7,9,即奇数。
通过dfs来构造。在当层递归中若k已是0,则升序构造就可,否则继续递归。若dfs完之后,k仍不是0,则失败。具体见代码
#include<bits/stdc++.h>#define INF 0x3f3f3f3f#define maxn 100000+10using namespace std;typedef long long ll;int n,k,now;int ans[maxn];void dfs(int left,int right){ if(k==0) { int from=now-(right-left)+1; int nfrom=from; for(int i=left;i<right;i++) ans[i]=nfrom++; now=from-1; return; } if(left==right-1) { ans[left]=now--; return; } int mid=(left+right)/2; k-=2; dfs(left,mid); dfs(mid,right);}int main(){ // freopen("input.txt","r",stdin); // freopen("output.txt","w",stdout); while(~scanf("%d %d",&n,&k)) { if(k%2==0) { printf("-1\n"); continue; } now=n; k--; dfs(0,n); if(k) printf("-1\n"); else { for(int i=0;i<n-1;i++) printf("%d ",ans[i]); printf("%d\n",ans[n-1]); } } return 0;}
阅读全文
0 0
- Codeforces 873D Merge Sort
- Codeforces 873D. Merge Sort 分治 + 构造
- codeforces 873D merge sort 构造
- Codeforces 873 D Merge Sort 【分治】
- codeforces D. Merge Sort 分治
- Codeforces 873 D Merge Sort(归并排序性质)
- Educational Codeforces Round 30 D. Merge Sort
- Educational Codeforces Round 30 D.Merge Sort
- Codeforces 847B Preparing for Merge Sort
- 【二分优化】Preparing for Merge Sort CodeForces
- CodeForces 340D - Bubble Sort Graph
- Codeforces 847 B. Preparing for Merge Sort (二分)
- Educational Codeforces Round 30-归并排序计数&构造- Merge Sort
- Merge Sort
- Merge sort
- merge sort
- merge sort
- merge sort
- 饿了么webapp之块级盒子垂直相邻margin重叠
- 无偏估计量
- 【C++】别再用memset初始化int数组了,用fill或者fill_n靠谱多了
- hugepages_settings.sh
- PyQt5学习教程4:对退出进行进一步确认
- Codeforces 873D Merge Sort
- 备忘录(不断更新)
- kdump配置
- 使用C#开发的一套管理系统
- 创建图片外链——“极简图床”
- 排序算法
- FTP服务器搭建
- bzoj1231 [Usaco2008 Nov]mixup2 混乱的奶牛(状压dp)
- Android安装运行中出现的问题