LuoguP4759 [CERC2014]Sums 题解
Content
给定 \(t\) 组数据,每组数据给定一个数 \(n\),判断 \(n\) 是否能够分解成连续正整数和,能的话给出最小数最大的方案。
数据范围:\(1\leqslant n\leqslant 10^9\)。
Solution
这道题如果暴力枚举的话,看数据范围就知道肯定会爆炸。因此我们要考虑推式子。
首先,我们设分解后的数列长度为 \(k\),首项为 \(a_1\)。那么显然得到 \(\text{(1)}\) 式:
\(\begin{aligned}n&=\dfrac{(a_1+(a_1+k-1))k}2\\&=\dfrac{(2a_1+k-1)k}2\end{aligned}\)
由于 \(a_1,k>0\),在 \(a_1>0\) 两边同时加上 \(a_1+k-1\) 得:
\]
然后我们由 \(\text{(1)}\) 式可得 \(2a_1+k-1=\dfrac{2n}{k}\),代入不等式:
\]
我们由样例可得 \(k\geqslant 2\)(读者自证不难),又因为 \(k\) 是正整数,所以得到了 \(k\) 的范围为:\(k\in[2,\left\lfloor\sqrt{2n}\right\rfloor]\)。
这样我们就可以考虑通过枚举 \(k\) 来求得答案。现在看 \(a_1\)。
我们还是通过 \(\text{(1)}\) 式求解:
\]
又因为 \(a_1\) 是正整数,所以只需要判断是否有下列条件成立即可:
- \(2k\mid(2n-k^2+k)\)。
- \(\dfrac{2n-k^2+k}{2k}>0\)
枚举出符合条件的方案我们就可以输出了,并且我们算一下不难发现,从 \(2\) 枚举到 \(\left\lfloor\sqrt{2n}\right\rfloor\) 第一个找出来的方案就是题目所要求的最小数最大的方案。注意输出的格式即可。如果枚举完了还是没有找到方案那就直接输出 IMPOSSIBLE 就好。
Code
int main() {
MT {
int n = Rint, flag = 1;
F(len, 2, (int)sqrt(2 * n)) {
if(!((2 * n - len * len + len) % (2 * len)) && (2 * n - len * len + len) / (2 * len) > 0) {
int a1 = (2 * n - len * len + len) / (2 * len);
printf("%d = ", n);
F(i, a1, a1 + len - 1) {
printf("%d ", i);
if(i != a1 + len - 1) printf("+ ");
else puts("");
}
flag = 0; break;
}
}
if(flag) puts("IMPOSSIBLE");
}
return 0;
}
LuoguP4759 [CERC2014]Sums 题解的更多相关文章
- [CF1204E]Natasha,Sasha and the Prefix Sums 题解
前言 本文中的排列指由n个1, m个-1构成的序列中的一种. 题目这么长不吐槽了,但是这确实是一道好题. 题解 DP题话不多说,直接状态/变量/转移. 状态 我们定义f表示"最大prefix ...
- CF1656E Equal Tree Sums 题解
题目链接 思路分析 自认为是一道很好的构造题,但是我并不会做. 看了题解后有一些理解,在这里再梳理一遍巧妙的思路. 我们先来看这样的一张图: 我们发现当去掉叶子节点的父亲时,剩下树的价值和等于叶子节点 ...
- CodeForces 223C Partial Sums 多次前缀和
Partial Sums 题解: 一个数列多次前缀和之后, 对于第i个数来说他的答案就是 ; i <= n; ++i){ ; j <= i; ++j){ b[i] = (b[i] + 1l ...
- DP | Luogu P1466 集合 Subset Sums
题面:P1466 集合 Subset Sums 题解: dpsum=N*(N+1)/2;模型转化为求选若干个数,填满sum/2的空间的方案数,就是背包啦显然如果sum%2!=0是没有答案的,就特判掉F ...
- 背包DP 方案数
题目 1 P1832 A+B Problem(再升级) 题面描述 给定一个正整数n,求将其分解成若干个素数之和的方案总数. 题解 我们可以考虑背包DP实现 背包DP方案数板子题 f[ i ] = f[ ...
- 【题解】【数组】【Prefix Sums】【Codility】Genomic Range Query
A non-empty zero-indexed string S is given. String S consists of N characters from the set of upper- ...
- 【题解】【数组】【Prefix Sums】【Codility】Passing Cars
A non-empty zero-indexed array A consisting of N integers is given. The consecutive elements of arra ...
- codechef Sums in a Triangle题解
Let's consider a triangle of numbers in which a number appears in the first line, two numbers appear ...
- 题解——UVA11997 K Smallest Sums
题面 背景 输入 输出 翻译(渣自翻) 给定K个包含K个数字的表,要求将其能产生的\( k^{k} \)个值中最小的K个输出出来 题解 k路归并问题的经典问题 可以转化为二路归并问题求解 考虑A[], ...
随机推荐
- key按键使用
1. 按键实验 查询原理图可知KEY对应的按键和引脚,当KEY按下时,引脚为低电平,否则为高电平 2. 代码 2.1 GPIO 为了方便GPIO的编写,建立GPIO的文件夹和对应的.h和.c文件. b ...
- idea增加jvm内存
-server -XX:PermSize=256M -XX:MaxPermSize=1024m
- Redis概述以及Linux安装
Redis 概述 Redis是什么 Redis,Remote Dictionary Server,远程字典服务.是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.key-v ...
- Codeforces 538G - Berserk Robot(乱搞)
Codeforces 题目传送门 & 洛谷题目传送门 一道很神的乱搞题 %%% 首先注意到如果直接去做,横纵坐标有关联,不好搞.这里有一个非常套路的技巧--坐标轴旋转,我们不妨将整个坐标系旋转 ...
- CF1493E Enormous XOR
题目传送门. 题意简述:给出长度为 \(n\) 的二进制数 \(l,r\),求 \(\max_{l\leq x\leq y\leq r}\oplus_{i=x}^yi\). 非常搞笑的题目,感觉难度远 ...
- 使用BRAKER2进行基因组注释
来自:https://www.jianshu.com/p/e6a5e1f85dda 使用BRAKER2进行基因组注释 BRAKER2是一个基因组注释流程,能够组合GeneMark,AUGUSTUS和转 ...
- python-django-数据查询条件
查询用户的状态是2或者是4的情况 空值和空字符串是不一样的东西!!! 需要注意的是: 项目setting.py里面的时区采用的是美国的时区,我们不要使用这个时区 使用这个时区的,我们输入的日期会进行转 ...
- python-django-模板标签
注意:这个控制语句和python的差不多,但是记住必须有endfor 和endif 结尾 模板文件的django格式的注释是不会出现再网页渲染的源代码当中的 使用列子: <!DOCTYPE ht ...
- window修改dns本地文件
文件地址: C:\Windows\System32\drivers\etc 先修改权限: 最后用记事本打开编辑保存即可
- NAT 工作原理
网络地址转换,就是替换IP报文头部的地址信息.NAT通常部署在一个组织的网络出口位置,通过将内部网络IP地址替换为出口的IP地址提供公网可达性和上层协议的连接能力 规定了三个保留地址段落:10.0.0 ...