[luogu] P4105 [HEOI2014]南园满地堆轻絮 (贪心)
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 ...
- NC20012 [HEOI2014]南园满地堆轻絮
NC20012 [HEOI2014]南园满地堆轻絮 题目 题目描述 小 Z 是 ZRP(Zombies' Republic of Poetry,僵尸诗歌共和国)的一名诗歌爱好者,最近他研究起了诗词音律 ...
- [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 题解: 考虑前面的数越小答案越优秀,于是我们二分答案,判断时让前面的数达到所能达到的 ...
随机推荐
- Problem 5
Problem 5 # Problem_5.py """ 2520 is the smallest number that can be divided by each ...
- 在centOS6.5 上安装使用pipework
需求:镜像生成了2个含有tomcat的容器,用nginx进行负载均衡.但是容器重启后ip会自动改变...所以使用pipework进行分配静态ip pipework安装 OS:centos6.5 第一步 ...
- Ruby按照换行符进行分割
Ruby按照换行符进行分割 string.split(/\n/)
- tomcat内存大小设置
tomcat内存大小设置 如果安装为windows服务,需要进行内存设置的时候,选择configure...界面, 在Java Tab页面内可以进行内存参数的设置. 学习了:http://elf884 ...
- iOS 使用脚本自动化复制target
有些项目成熟以后,就会有需求自动化配置生成一个全新的项目,不需要再让开发人员手动修改工程文件,将配置化工作直接移交给运维或者配置团队去做 其实按照普通的做法,无非就是在xcode里将目标target ...
- 【解决】run-as: Package '' is unknown
问题: [2014-07-30 20:20:25 - nativeSensorStl] gdbserver output: [2014-07-30 20:20:25 - nativeSensorStl ...
- 本地 配置 Memcache
如果帮到了您,可以支持一下,谢谢您的支持! Windows下的Memcache安装: 64bit:如果需要win64版,下载 memcached-win64-1.4.4-14.zip(直接下),里面有 ...
- HDU 5672 String 尺取法追赶法
String Problem Description There is a string S.S only contain lower case English character.(10≤lengt ...
- php后期静态绑定
php后期静态绑定 自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类. 虽然也可以调用非静态方法,但是不会在运行时绑定. static 不再只是简 ...
- nyoj--68--三点顺序(数学)
三点顺序 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 现在给你不共线的三个点A,B,C的坐标,它们一定能组成一个三角形,现在让你判断A,B,C是顺时针给出的还是逆时针 ...