P4105 [HEOI2014]南园满地堆轻絮
题目描述
小 Z 是 ZRP(Zombies’ Republic of Poetry,僵尸诗歌*)的一名诗歌爱好者,最近 他研究起了诗词音律的问题。
在过去,诗词是需要编成曲子唱出来的,比如下面这首《菩萨蛮》,唱出来的话其对应的音符就是这样的:
南 园 满 地 堆 轻 絮, 愁 闻 一 霎 清 明 雨
1 1 5 5 6 6 5 4 4 3 3 2 2 1
因而可以发现,1 1 5 5 6 6 5 4 4 3 3 2 2 1
这串音符就成为了研究音律的关键。
小 Z 翻阅了众多史料发现,过去的一首曲子的音调是不下降的。 小 Z 想要知道对于一首给定的曲子,如何通过提高音调或者降低音调,将它的音调修改的不下降,而且使得修改幅度最大的那个音符的修改幅度尽量小。即如果把一个包含 n 个音 符的曲子看做是一个正整数数列 \(A[1] \cdots A[n]\),那么目标是求另一个正整数数列 \(B[1]…B[n]\), 使得对于任意的 \(1≤i<n\) 有 \(B[i] ≤B[i+1]\),而且使得 \(Ans = Max\{|A[j]-B[j]|,1≤j≤n\}\)尽量 小。 小 Z 很快就想清楚了做法,但是鉴于他还忙着写诗,所以这个任务就交给了你。
输入输出格式
输入格式:
由于数据规模可能较大,因此采用如下方式生成数据。
每个数据包含 7 个数:\(n,S_a,S_b,S_c,S_d,A[1],Mod\),即共有 n 个音符,第一个音符为 A[1]。
生成规则如下: 定义生成函数 \(F(x) = S_a*x^3 + S_b*x^2 + S_c*x + S_d\); 那么给出递推公式 \(A[i] =( F(A[i-1]) + F(A[i-2]) )\%mod\),此处规定 A[0] = 0. 由于中间过程的数可能会特别大,所以要求每一步与 A 中的每个数都对一个给定的数 Mod 取模。
输出格式:
输出一行,包含一个正整数 Ans
输入输出样例
输入样例#1: 复制
3 815 6901 3839 178 199 10007
输出样例#1: 复制
1334
说明
【数据范围】
对于 10% 的数据, n≤3
对于 20% 的数据, n≤10
对于 30% 的数据, n≤100
对于 50% 的数据, n≤1000
对于 70% 的数据, n≤100000
对于 100% 的数据, n≤5000000,\(S_a,S_b,S_c,S_d,A[1] ≤10000\),\(Mod≤1000000007\)
【友情提示】
样例中生成的数列为: 199 4568 1901,此时将 4568 修改为 3234,1901 也修改为 3234 即可,代价为 1334。
题解
1.时间复杂度是\(O(n)\)的,嗯,是读入时间,最大的代价很显然就是逆序对里面相差最大的两个数的改变代价的一半,因为两个数都减小一半就可以了,解决的复杂度\(O(1)\)。
2.还有一个做法是二分,我反正第一想法是这个,就是每次二分一个值然后遇到逆序对就考虑减少这个值,很显然答案是符合单调性的然后就可以了。
3.假省选题,pj-难度...
Code
本题解只提供\(O(n)\)代码,反正都不难打。
唯一坑点,F值容易炸long long
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,a,b,c,d,A[5000001],mx,ans,mod;
ll F(ll x){
return ((((((a*x)%mod*x)%mod*x)%mod+(b*x%mod)*x%mod)%mod+(c*x)%mod)%mod+d)%mod;
}
int main(){
cin>>n>>a>>b>>c>>d>>A[1]>>mod;
mx=A[1];
for(int i=2;i<=n;i++){
A[i]=(F(A[i-1])+F(A[i-2]))%mod;
ans=max(ans,mx-A[i]);
mx=max(A[i],mx);
}
cout<<(ans+1)/2<<endl;
return 0;
}
[luogu] P4105 [HEOI2014]南园满地堆轻絮 (贪心)的更多相关文章
-
Luogu P4105 [HEOI2014]南园满地堆轻絮
题解 传送门 其实只要找差距最大的逆序对就好了 答案就是此逆序对的差 /2 代码 (代码很短) #include<bits/stdc++.h> using namespace std; # ...
-
[HEOI2014]南园满地堆轻絮
[HEOI2014]南园满地堆轻絮 BZOJ luogu 二分答案贪心check 首先b[1]最小一定优 之后就贪心的最小化b[i]就行 #include<bits/stdc++.h> u ...
-
BZOJ_3613_[Heoi2014]南园满地堆轻絮_二分答案
BZOJ_3613_[Heoi2014]南园满地堆轻絮_二分答案 Description 小 Z 是 ZRP(Zombies’ Republic of Poetry,僵尸诗歌*)的一名诗歌爱好者, ...
-
【BZOJ3613】[HEOI2014]南园满地堆轻絮(贪心)
[BZOJ3613][HEOI2014]南园满地堆轻絮(贪心) 题面 BZOJ 洛谷 题解 考虑二分的做法,每次二分一个答案,那么就会让所有的值尽可能的减少,那么\(O(n)\)扫一遍就好了. 考虑如 ...
-
3613: [Heoi2014]南园满地堆轻絮
3613: [Heoi2014]南园满地堆轻絮 Time Limit: 50 Sec Memory Limit: 256 MB Submit: 827 Solved: 534 [Submit][Sta ...
-
[BZOJ3613][Heoi2014]南园满地堆轻絮 二分答案
Description 小 Z 是 ZRP(Zombies’ Republic of Poetry,僵尸诗歌*)的一名诗歌爱好者,最近 他研究起了诗词音律的问题. 在过去,诗词是需要编成曲子唱 ...
-
BZOJ3613: [Heoi2014]南园满地堆轻絮
分析: 构造数据时间有些长,可以用秦九韶优化一下. 二分答案+贪心,即:另每一个b[i]尽可能的小的同时满足题意,在枚举过程中,判断是否存在一个b[i-1]>a[i]+x 如果存在,那么向右找 ...
-
BZOJ 3613: [Heoi2014]南园满地堆轻絮(二分)
题面: https://www.lydsy.com/JudgeOnline/problem.php?id=3613 题解: 考虑前面的数越小答案越优秀,于是我们二分答案,判断时让前面的数达到所能达到的 ...
-
2018.07.22 bzoj3613: [Heoi2014]南园满地堆轻絮(逆序对结论题)
传送门 做这道题有一个显然的结论,就是要使这个数列单调不减,就要使所有逆序对保证单调不减,也就是求出所有逆序对的最大差值,然后除以2然后就没了. 代码如下: #include<bits/stdc ...
随机推荐
-
amaze UI的使用
1.放置在独立的位置 2.引入核心css与js <link href="{sh::PUB}amaze-ui/css/amazeui.min.css" rel="st ...
-
Mining 任务分类
1.预测任务: 根据其它属性的值预测特定属性的值. 2.描述性任务: 发现数据之间潜在的关联关系.
-
⑨的完美冻青蛙(frog)
⑨的完美冻青蛙(frog) 时间限制: 1 Sec 内存限制: 128 MB 题目描述 输入 第一行是一个正整数n,表示上式中的p的个数. 接下来有n行,每一行两个正整数pi 和ei . 输出 ...
-
my discipline life
周一 ~ 周五 7.30 --- 8.00 起床,洗漱等 8.00 --- 8.30 默写8-10个英语单词 8.35 --- 9.10 吃早餐,骑自行车去公司 12.20 --- 1 ...
-
Linux下解压后缀名为".tar.xz"的文件
作者:荒原之梦 原文链接:http://zhaokaifeng.com/?p=576 1 解压".xz" xz -d your_file_name.tar.xz 注:运行上述命令后 ...
-
Android自动化测试学习路线
最近在整理Android自动化测试的相关资料,大体上把一些知识点梳理了,这里做一个简单的分享! Android里面测试相关的工具和框架太多了.你应该从以下几个方面入手. 编程语言的选择 如果你要学习的 ...
-
SHOW PROCESSLIST shows which threads are running 查看线程 解决瓶颈
小结: 1.查看全部线程: https://dev.mysql.com/doc/refman/8.0/en/show-processlist.html MySQL 8.0 Reference Manu ...
-
Appium之手机屏幕亮度控制条处理
手机设置下的屏幕亮度控制条看上去是悬浮的,想手动调整亮度有两种方法:一.在控制条上左右任意拖动:二.在控制条上点击任意一点.如下图:
-
NTFS ADS带来的web安全问题
有关ADS的简单说明请看http://www.xfocus.net/articles/200212/466.html 可以看到ADS在很久以前就被一些安全人员所关注,并且也提出了一些经典的利用,比如隐 ...
-
mongodb - 集合重命名
#创建新的集合yb > for(i=0;i<10;i++){db.yb.insert({'i':i})} WriteResult({ "nInserted" : 1 } ...