BZOJ 3119 Book (贪心+数学推导)
手动博客搬家: 本文发表于20171029 22:49:41, 原地址https://blog.csdn.net/suncongbo/article/details/78388925
URL: http://www.lydsy.com/JudgeOnline/problem.php?id=3119
题目大意:
给定一个序列v[]的长度n (n<=1e5), 第一个元素的值p以及序列中所有元素的和m (m在long long范围内), 规定对于任意的2<=i<=n, 都有v[i]=v[i-1]+a或v[i]=v[i-1]-b, 同时给定a,b, 确定一组可能的v[]至并输出。
思路分析:
为了方便起见,先将b变为输入数的相反数(即变为一个负数)。
首先,考虑初始值x造成的影响: 它使得1至n的序列所有元素增加了x, 因此可以将这个值剔除,这样和变成了\(m-np\).
其次,考虑第i个元素的值v[i]=v[i-1]+a造成的影响: 它使得i至n的序列中所有元素增加了a,使总和增加了\((n+1-i)a\).
同理可得,若v[i]=v[i-1]+b (b为负数)则使总和增加了\((n+1-i)b\)
在这里,我们称这次赋值对总和产生了\((n+1-i)\)点影响。
显然,所有的赋值对总和一共产生了\(\sum_{i=2}^n (n+1-i)=\sum_{i=1}^{n-1} i=\frac{1}{2}n(n-1)\)点影响。设其中+a产生的影响为x点,+b产生的影响为y点。由刚才的结论得:$$x+y=\frac{1}{2}n(n-1)$$$$xa+yb=m-nx$$
解二元一次方程组可得$$x=\frac{1}{2}n(n-1)-y$$$$y=\frac{\frac{1}{2}an(n-1)-m+np}{a-b}$$
于是只需构造方案即可。这一步比较简单。可以用贪心来实现。
我们的目标是在1至n得正整数范围内找到一些互不相同数使得他们的和恰好是x,其余的数的和恰好是y, 因为\(x+y=\frac{1}{2}n(n-1)\).因此,我们只需选出和为x的部分。考虑到$$1=1$$$$2=2, 3=2+1$$$$4=3+1, 5=3+2, 6=3+2+1$$$$7=4+3, 8=4+3+1, 9=4+3+2, 10=4+3+2+1$$$$...$$
注:第i行能用的最大的数是i.
因此,我们得到一种贪心策略: 从n开始,从大到小依次选择,如果剩余的x能够选上i就选,并且x-=i, 直至x==0为止,剩余的就是y.
若为x, 则v[i]=v[i-1]+a; 否则v[i]=v[i-1]+b (b<0)
但由于对总和产生了i点影响的是(n+i-1)号决策,因此输出时勿忘倒着输出。
代码实现:
(Memory: 920KB; Time: 376MS; Code: 614B)
#include<cstdio>
using namespace std;
const int MAXN = 1e5;
bool inc[MAXN+2];
int main()
{
long long a,b,x,y,m,n,p;
scanf("%lld%lld%lld%lld%lld",&n,&p,&a,&b,&m);
b = -b;
y = (a*n*(n-1)/2-m+n*p)/(a-b);
x = n*(n-1)/2-y;
long long cur = p;
for(long long i=n-1; i && x; i--)
{
if(x>=i)
{
inc[i] = true;
x-=i;
}
}
printf("%lld",cur);
for(long long i=n-1; i; i--)
{
if(inc[i]) cur+=a;
else cur+=b;
printf(" %lld",cur);
}
return 0;
}
BZOJ 3119 Book (贪心+数学推导)的更多相关文章
- BZOJ 2956 模积和 (数学推导+数论分块)
手动博客搬家: 本文发表于20170223 16:47:26, 原地址https://blog.csdn.net/suncongbo/article/details/79354835 题目链接: ht ...
- 借One-Class-SVM回顾SMO在SVM中的数学推导--记录毕业论文5
上篇记录了一些决策树算法,这篇是借OC-SVM填回SMO在SVM中的数学推导这个坑. 参考文献: http://research.microsoft.com/pubs/69644/tr-98-14.p ...
- 关于不同进制数之间转换的数学推导【Written By KillerLegend】
关于不同进制数之间转换的数学推导 涉及范围:正整数范围内二进制(Binary),八进制(Octonary),十进制(Decimal),十六进制(hexadecimal)之间的转换 数的进制有多种,比如 ...
- UVA - 10014 - Simple calculations (经典的数学推导题!!)
UVA - 10014 Simple calculations Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & ...
- 『sumdiv 数学推导 分治』
sumdiv(POJ 1845) Description 给定两个自然数A和B,S为A^B的所有正整数约数和,编程输出S mod 9901的结果. Input Format 只有一行,两个用空格隔开的 ...
- LDA-线性判别分析(二)Two-classes 情形的数学推导
本来是要调研 Latent Dirichlet Allocation 的那个 LDA 的, 没想到查到很多关于 Linear Discriminant Analysis 这个 LDA 的资料.初步看了 ...
- leetcode 343. Integer Break(dp或数学推导)
Given a positive integer n, break it into the sum of at least two positive integers and maximize the ...
- [hdu5307] He is Flying [FFT+数学推导]
题面 传送门 思路 看到这道题,我的第一想法是前缀和瞎搞,说不定能$O\left(n\right)$? 事实证明我的确是瞎扯...... 题目中的提示 这道题的数据中告诉了我们: $sum\left( ...
- ZOJ3329(数学推导+期望递推)
要点: 1.期望的套路,要求n以上的期望,则设dp[i]为i分距离终点的期望步数,则终点dp值为0,答案是dp[0]. 2.此题主要在于数学推导,一方面是要写出dp[i] = 什么,虽然一大串但是思维 ...
随机推荐
- windows server使用 LetsEncrypt-Win-Simple来安装和使用用Let's Encrypt免费SSL证书
一.网站部署 LetsEncrypt-Win-Simple可以自动发现已经部署的网站供我们选择要生成证书的网站,而且还需要进行验证.所以在生成证书之前,确保网站已经部署好并可以正常访问. 二.生成证书 ...
- 一个jeecg整合activiti的学习样例,源代码下载
社区成员:刘京华採用技术:jeecg+ activiti源代码下载地址:http://pan.baidu.com/s/1dDxOHrV 截图演示: 2.jpg (71.81 KB, 下载次数: 0) ...
- user和userdebug区别
user:不可以root userdebug:可以root
- 利用安卓手机搭建WEB服务器
背景介绍 Android是一种基于Linux的自由及开放源代码的操作系统 所以是用安卓来搭建服务器是完全可行的.接下来将教大家如何利用AndroPHP和Feel FTP(或者其他FTP管理器)来在安卓 ...
- 前缀和&&离散化
现在正在上课,但我还是要同步更新博文...\滑稽 先讲一个离散化,就是把几个离的特别远的数在不影响结果的情况下,变成相近的数.倒是没什么影响,但应用在数组下标的话可以节约空间.(貌似和hash有点像) ...
- thinkphp3.2 验证码生成和点击刷新验证码
生成验证码的时候: public function verify_c(){ $Verify = new \Think\Verify(); $Verify->fontSize = 18; $Ver ...
- 【Usaco2006Mar】Milk Team Select产奶比赛
[思路分析] 比赛的时候想到了用我确实也想到了树形DP,但是状态没有确定对,连样例都没有过 PS:这是第二道发现还可以用状态作为答案最后输出的题目 正解:树形DP(背包) 按照读进来的数据,我们先建一 ...
- 题解报告:hdu 1850 Being a Good Boy in Spring Festival(尼姆博弈)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1850 Problem Description 一年在外 父母时刻牵挂春节回家 你能做几天好孩子吗寒假里 ...
- 前端面试基础-html篇之H5新特性
h5的新特性(目前个人所了解)如下 语义化标签 表单新特性 视频(video)和音频(audio) canvas画布 svg绘图 地理定位 为鼠标提供的拖放API webworker (重点)Stor ...
- [转]line-height1.5和line-height:150%的区别
line-height1.5和line-height:150%的区别 一.区别 区别体现在子元素继承时,如下: 父元素设置line-height:1.5会直接继承给子元素,子元素根据自己的font ...