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[], ...
随机推荐
- 关于postman的接口登录验证问题
1.shiro的接口登录问题 碰到需要接口登录验证的:访问项目接口地址login,找到cookie将Cookie数据放入postman的headers 中. 2.碰到 security的项目.首先把相 ...
- GraalVM最佳实践,使用Java开发CLI、Desktop(JavaFX)、Web(SpringBoot)项目,并使用native-image技术把Java代码静态编译为独立可执行文件(本机映像)
原创文章,转载请注明出处! 源码地址: Gitee Gtihub 介绍 GraalVM最佳实践,使用Java开发CLI.Desktop(JavaFX).Web(SpringBoot)项目,并使用nat ...
- Codeforces 512D - Fox And Travelling(树上背包)
题面传送门 题意: 给出一张无向图,每次你可以选择一个度数 \(\leq 1\) 的点并将其删除. 问对于 \(k=0,1,2,\dots,n\),有多少个删除 \(k\) 个点的序列,答案模 \(1 ...
- Atcoder Regular Contest 061 D - Card Game for Three(组合数学)
洛谷题面传送门 & Atcoder 题面传送门 首先考虑合法的排列长什么样,我们考虑将每次操作者的编号记录下来形成一个序列(第一次 A 操作不计入序列),那么显然这个序列中必须恰好含有 \(n ...
- 手写Bitset优化
一种优化方法,具体例子可以看这里 这里只是存一下手写Bitset的板子 struct Bitset { unsigned a[1600]; void reset() { memset(a,0,size ...
- 关于 KB/KiB、MB/MiB
ermmm--怎么说呢,这个非常容易搞混,那就写篇 blog 澄清一下吧-- 首先贴上百度百科的官方定义 根据国际单位制标准,1KB = 1000B(字节, Byte). 根据按照 IEC 命名标准 ...
- 【GS文献】基因组选择在植物分子育种应用的最新综述(2020)
目录 1. 简介 2. BLUP类模型 3. Bayesian类模型 4. 机器学习 5. GWAS辅助的GS 6. 杂交育种 7. 多性状 8. 长期选择 9. 预测准确性评估 10. GS到植物育 ...
- 什么是总线、总线的类型、局部总线、局部总线类型和什么是接口方式?什么是IDE?什么是SCSI?
在安装电脑系统时,进行内核配置时涉及到各种总线类型,有必要了解一下什么是总线.总线的类型.局部总线.局部总线类型和接口方式. 1)总线总线是一组通信线.在机器内部, 各部件通过总线连接; 对于外部设备 ...
- Excel-姓名列中同一个人汇总金额列,得出总金额
8.姓名列中同一个人求和金额列,得出总金额. 方法一: P2处公式=SUMPRODUCT(($M$2:$M$20=$M2)*($N$2:$N$20)) 解释函数: 引用:https://zhinan. ...
- CentOS6忘记root密码如何重置
CentOS6忘记root密码,如何重置密码 ① 重启服务器,按"e"键进入修改系统开机项界面 ② 选择内核项,按"e"进入其中进行配置 在文件内 ...