2019牛客暑期多校训练营(第三场)I Median
题意:给出n-2的中位数序列b,b[i]代表原序列中(a[i],a[i+1],a[i+2])的中位数,求a。
解法:比赛的时候没做出来,赛后看题解的。解法跟网上各位大佬一样:首先要证明其实原序列a中的每一个元素都是来自于b中与其相关的3个数(a[i] from b[i-2],b[i-1],b[i]),那么根据这个我们就可以考虑用dp来构造方案了。
dp的实现网上更多是dp[i][j][k]代表前i-2序列已经合法且第位置i填相关数中的第j小,位置i-1填相关数中的第k小使得前i序列都是合法的。但是我感觉这样设计处理起来有点不方便。
我的dp是,dp[i][j][k]代表前i-2合法,位置i填 b(i-j) 位置i-1填 b(i-1-k) 使得前i序列合法。当然要输出方案的话还需要一个g[i][j][k]代表当前状态从那个状态转移而来,因为当前的k已经记录了i-1的j,所以只有再记录一个l作为i-1的k就能得到上一个状态。
那么状态转移方程就是:f[i][j][k]=1;且g[i][j][k]=l; (f[i-1][k][l] && calc(b[i-j],b[i-1-k],b[i-2-l])==b[i-2]) ;
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+;
int n,a[N],b[N],f[N][][],g[N][][]; int calc(int x,int y,int z) {
int t[]; t[]=x; t[]=y; t[]=z;
sort(t,t+);
return t[];
} void print(int i,int j,int k) {
if (i==) {
printf("%d %d ",b[i--k],b[i-j]);
return;
}
print(i-,k,g[i][j][k]);
printf("%d ",b[i-j]);
} int main()
{
int T; cin>>T;
while (T--) {
scanf("%d",&n);
for (int i=;i<=n-;i++) scanf("%d",&b[i]);
for (int i=;i<=n;i++) for (int j=;j<=;j++) for (int k=;k<=;k++) f[i][j][k]=;
for (int i=;i<=;i++) for (int j=;j<=;j++) for (int k=;k<=;k++)
if (i-j>= && i--k>=) f[i][j][k]=; bool ok=; int rj,rk;
for (int i=;i<=n;i++)
for (int j=;j<=;j++)
for (int k=;k<=;k++)
for (int l=;l<=;l++)
if (f[i-][k][l] && calc(b[i-j],b[i--k],b[i--l])==b[i-]) {
f[i][j][k]=;
g[i][j][k]=l;
if (i==n) {
ok=; rj=j; rk=k;
}
} if (!ok) { puts("-1"); continue; }
print(n,rj,rk); puts("");
}
return ;
}
2019牛客暑期多校训练营(第三场)I Median的更多相关文章
- 2019牛客暑期多校训练营(第三场)H题目
题意:给你一个N×N的矩阵,求最大的子矩阵 满足子矩阵中最大值和最小值之差小于等于m. 思路:这题是求满足条件的最大子矩阵,毫无疑问要遍历所有矩阵,并判断矩阵是某满足这个条件,那么我们大致只要解决两个 ...
- 2019牛客暑期多校训练营(第三场)- F Planting Trees
题目链接:https://ac.nowcoder.com/acm/contest/883/F 题意:给定n×n的矩阵,求最大子矩阵使得子矩阵中最大值和最小值的差值<=M. 思路:先看数据大小,注 ...
- 2019牛客暑期多校训练营(第三场) F.Planting Trees(单调队列)
题意:给你一个n*n的高度矩阵 要你找到里面最大的矩阵且最大的高度差不能超过m 思路:我们首先枚举上下右边界,然后我们可以用单调队列维护一个最左的边界 然后计算最大值 时间复杂度为O(n*n*n) # ...
- 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)
题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9: 对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可. 后者mod=1e9,5才 ...
- 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...
- 2019牛客暑期多校训练营(第一场) B Integration (数学)
链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...
- 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...
- 2019牛客暑期多校训练营(第二场)F.Partition problem
链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...
- 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...
- [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem
链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...
随机推荐
- java Scanner输入数字、字符串
package java05; import java.util.Scanner;//1.导包 /* Scanner类的功能,可以实现键盘输入数据,到程序当中 引用类型的一班使用步骤: 1.导包 2. ...
- springboot使用异步查询数据
主要适用于需要查询多种类型的数据,而且二者的参数没有关联的情况. 1.开启异步调用注解 2.创建抽象类,定义相关方法 /** * @author:YZH * time: 2019/8/8 12:16 ...
- vue的列表交错过渡
参考文章 https://juejin.im/post/5cccf5b0e51d453a907b4af1
- List接口和Set接口及其常用实现类概述
一.List接口 List:有序的 collection(也称为序列).此接口的用户可以对列表中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元 ...
- pspice介绍1(转载)
PSpice的主要功能及特点: OrCAD软件的主要组成包括:OrCAD/Capture CIS.OrCAD/Layout Plus.OrCAD/Express及OrCAD/PSpice.它们分别是: ...
- C#基础提升系列——C#异步编程
C#异步编程 关于异步的概述,这里引用MSDN的一段文字: 异步编程是一项关键技术,使得能够简单处理多个核心上的阻塞 I/O 和并发操作. 如果需要 I/O 绑定(例如从网络请求数据或访问数据库),则 ...
- 英语单词Repository
Repository 来源——查看仓库的名称内容 [root@centos7 ~]# yum repolist Loaded plugins: fastestmirror Repository bas ...
- Mybatis的运行原理
我们写的sql语句就在statementBuilder中. 整个mapper的信息都保存到configuration 1:根据配置文件创建SQLSessionFactory 先创建SqlSession ...
- 洛谷P3374(线段树)(询问区间和,支持单点修改)
洛谷P3374 //询问区间和,支持单点修改 #include <cstdio> using namespace std; ; struct treetype { int l,r,sum; ...
- [CSP-S模拟测试]:蔬菜(二维莫队)
题目描述 小$C$在家中开垦了一块菜地,可以抽象成一个$r\times c$大小的矩形区域,菜地的每个位置都种着一种蔬菜.秋天到了,小$C$家的菜地丰收了. 小$C$拟定了$q$种采摘蔬菜的计划,计划 ...