szoj461【四校联考0430】挑战
传送门:(涉及版权忽略)
【题解】
我们发现n的范围很小,提示我们可以折半,然后我们就会了O(T2^(n/2)*n)的做法,然而会T。
考虑如何优化。直接排序会多一个log(2^(n/2))也就是n,那么改成每次加一个数,归并即可。这样复杂度是对的
T(n) = T(n-1) + 2^n ==> T(n) = O(2^n)
那么复杂度就是O(T2^(n/2))
# include <stdio.h>
# include <string.h>
# include <algorithm>
// # include <bits/stdc++.h> using namespace std; typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
const int M = + , N = ;
const int mod = 1e9+; # define FO_OPEN
# define RG register
# define ST static int n, m, a[M];
int c[][N], cn[];
int t[N]; inline void merge(int pos, int l, int mid, int r) {
int i = l, j = mid+, k = l-;
while(i<=mid && j<=r) {
if(c[pos][i] < c[pos][j]) t[++k] = c[pos][i++];
else t[++k] = c[pos][j++];
}
while(i<=mid) t[++k] = c[pos][i++];
while(j<=r) t[++k] = c[pos][j++];
for (int o=l; o<=r; ++o) c[pos][o] = t[o];
} inline void sol() {
int sum = ;
scanf("%d%d", &n, &m);
for (int i=; i<=n; ++i) scanf("%d", &a[i]), sum = sum + a[i];
if(sum < m) {
puts("-1");
return ;
}
int res = n/;
c[][cn[] = ] = ;
for (int i=; i<=res; ++i) {
for (int j=; j<=cn[]; ++j) c[][j+cn[]] = c[][j] + a[i];
merge(, , cn[], cn[] << );
cn[] <<= ;
}
// printf("cn[0] = %d\n", cn[0]);
// for (int i=1; i<=cn[0]; ++i) printf("%d ", c[0][i]);
// puts("\n====================");
c[][cn[] = ] = ;
for (int i=res+; i<=n; ++i) {
for (int j=; j<=cn[]; ++j) c[][j+cn[]] = c[][j] + a[i];
merge(, , cn[], cn[] << );
cn[] <<= ;
}
// printf("cn[1] = %d\n", cn[1]);
// for (int i=1; i<=cn[1]; ++i) printf("%d ", c[1][i]);
// puts("");
int p0 = , p1 = cn[], ans = ;
for (; p0 <= cn[]; p0 ++) {
while(p1 && c[][p0] + c[][p1] >= m) --p1;
if(p1 != cn[])
ans = min(ans, c[][p0] + c[][p1 + ]);
}
printf("%d\n", ans);
} int main() {
FO_OPEN ? freopen("challenge.in", "r", stdin), freopen("challenge.out", "w", stdout) : ;
int T; scanf("%d", &T);
while(T--) sol();
return ;
}
szoj461【四校联考0430】挑战的更多相关文章
- [2017/5/28]FJ四校联考
来自FallDream的博客,未经允许,请勿转载,谢谢. 话说这一段时间算是过去了,好久好久之后终于又有联考了 没想到这次到我们学校出题,昨天才想起来,临时花一天赶了一套,我出了一个sbFFT,质量 ...
- [四校联考P3] 区间颜色众数 (主席树)
主席树 Description 给定一个长度为 N 颜色序列A,有M个询问:每次询问一个区间里是否有一种颜色的数量超过了区间的一半,并指出是哪种颜色. Input 输入文件第一行有两个整数:N和C 输 ...
- 四校联考 tree3
我们考虑计算红色点与非红色点的对数. 我们用f[i][j]表示i的子树中有j个红色点的概率,将i所有子树合并. 接着我们对于每一个状态,枚举i是红色还是非红色算概率. 同时我们可以求出i和i子树内一个 ...
- [3.19FJ四校联考]
来自FallDream的博客.未经允许,请勿转载,谢谢. ---------------------------------------------------- A.积分,不会 以后补 B.给定一 ...
- 【四校联考】【比赛题解】FJ NOIP 四校联考 2017 Round 7
此次比赛为厦门一中出题.都是聚劳,不敢恭维. 莫名爆了个0,究其原因,竟然是快读炸了……很狗,很难受. 话不多说,来看看题: [T1] 题意: 样例: PS:1<=h[i]<=100000 ...
- 三校联考 Day3
三校联考 Day3 大水题 题目描述:给出一个圆及圆上的若干个点,问两个点间的最远距离. solution 按极角排序,按顺序枚举,显然距离最远的点是单调的,线性时间可解出答案. 大包子的束缚 题目描 ...
- 【赛时总结】NOIP2018-三校联考1024
◇NOIP三校联考-1024◇ 发现以前的博客写得似乎都很水……基本上都没什么阅读量QwQ 决定改过自新╰( ̄ω ̄o) 就从这篇博客开始吧~ 现场考得无地自容,看到题解才发现一些东西……(我第三题还没 ...
- [2019多校联考(Round 6 T3)]脱单计划 (费用流)
[2019多校联考(Round 6 T3)]脱单计划 (费用流) 题面 你是一家相亲机构的策划总监,在一次相亲活动中,有 n 个小区的若干男士和 n个小区的若干女士报名了这次活动,你需要将这些参与者两 ...
- [多校联考2019(Round 5 T1)] [ATCoder3912]Xor Tree(状压dp)
[多校联考2019(Round 5)] [ATCoder3912]Xor Tree(状压dp) 题面 给出一棵n个点的树,每条边有边权v,每次操作选中两个点,将这两个点之间的路径上的边权全部异或某个值 ...
随机推荐
- 27、理解js的继承机制(转载自阮一峰)
Javascript继承机制的设计思想 作者: 阮一峰 日期: 2011年6月 5日 我一直很难理解Javascript语言的继承机制. 它没有"子类"和"父类&qu ...
- APPium-python实例(记录)
https://github.com/appium/sample-code/tree/master/sample-code/examples/python
- Linux-Qt Quick学习1-Hello world
Qt作为共平台的开发IDE.实在是强大,在Quick的学习中,与平台无关,我这里使用ubuntu和openSUSE,之所以不用Windows,是因为我想借这个机会过学习一点linux的东西,哪怕是熟悉 ...
- Python面试315题
感谢老男孩的武沛齐老师辛苦整理和分享,本文是转自他的博客. 第一部分 Python基础篇(80题) 为什么学习Python? 通过什么途径学习的Python? Python和Java.PHP.C.C# ...
- FlaskWeb开发从入门到放弃(二)
第5章 章节五 01 内容概要 02 内容回顾 03 面向对象相关补充:metaclass(一) 04 面向对象相关补充:metaclass(二) 05 WTforms实例化流程分析(一) 06 WT ...
- 树莓派putty远程登录windows
刚买树莓派的你,还在为要不要购买昂贵的屏幕而纠结吗?看完本博客学会远程登录,妈妈再也不用担心我的学习... 首先我们要知道树莓派的官方推荐系统是raspbian 很建议安装16年9月份的,其他的总是这 ...
- Visual Studio 2015安装包
点击下载
- Go基础篇【第8篇】: 内置库模块 bytes [一]
bytes包实现了操作[]byte的常用函数.本包的函数和strings包的函数相当类似. func Compare func Compare(a, b []byte) int Compare函数返回 ...
- BZOJ 3809 Gty的二逼妹子序列 莫队算法+分块
Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽度的种类数. 为了方便,我们 ...
- Source Tree基础教程2
1.分支 项目——分支——推送 新分支要重新拉取项目后才可以看见 项目——拉取 2合并分支代码 将其他分支代码合并到当前分支——提交