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]南园满地堆轻絮 (贪心)的更多相关文章

  1. Luogu P4105 [HEOI2014]南园满地堆轻絮

    题解 传送门 其实只要找差距最大的逆序对就好了 答案就是此逆序对的差 /2 代码 (代码很短) #include<bits/stdc++.h> using namespace std; # ...

  2. [HEOI2014]南园满地堆轻絮

    [HEOI2014]南园满地堆轻絮 BZOJ luogu 二分答案贪心check 首先b[1]最小一定优 之后就贪心的最小化b[i]就行 #include<bits/stdc++.h> u ...

  3. BZOJ_3613_[Heoi2014]南园满地堆轻絮_二分答案

    BZOJ_3613_[Heoi2014]南园满地堆轻絮_二分答案 Description 小 Z 是 ZRP(Zombies’ Republic of Poetry,僵尸诗歌共和国)的一名诗歌爱好者, ...

  4. 【BZOJ3613】[HEOI2014]南园满地堆轻絮(贪心)

    [BZOJ3613][HEOI2014]南园满地堆轻絮(贪心) 题面 BZOJ 洛谷 题解 考虑二分的做法,每次二分一个答案,那么就会让所有的值尽可能的减少,那么\(O(n)\)扫一遍就好了. 考虑如 ...

  5. 3613: [Heoi2014]南园满地堆轻絮

    3613: [Heoi2014]南园满地堆轻絮 Time Limit: 50 Sec Memory Limit: 256 MB Submit: 827 Solved: 534 [Submit][Sta ...

  6. NC20012 [HEOI2014]南园满地堆轻絮

    NC20012 [HEOI2014]南园满地堆轻絮 题目 题目描述 小 Z 是 ZRP(Zombies' Republic of Poetry,僵尸诗歌共和国)的一名诗歌爱好者,最近他研究起了诗词音律 ...

  7. [BZOJ3613][Heoi2014]南园满地堆轻絮 二分答案

    Description 小 Z 是 ZRP(Zombies’ Republic of Poetry,僵尸诗歌共和国)的一名诗歌爱好者,最近 他研究起了诗词音律的问题.   在过去,诗词是需要编成曲子唱 ...

  8. BZOJ3613: [Heoi2014]南园满地堆轻絮

    分析: 构造数据时间有些长,可以用秦九韶优化一下. 二分答案+贪心,即:另每一个b[i]尽可能的小的同时满足题意,在枚举过程中,判断是否存在一个b[i-1]>a[i]+x 如果存在,那么向右找 ...

  9. BZOJ 3613: [Heoi2014]南园满地堆轻絮(二分)

    题面: https://www.lydsy.com/JudgeOnline/problem.php?id=3613 题解: 考虑前面的数越小答案越优秀,于是我们二分答案,判断时让前面的数达到所能达到的 ...

随机推荐

  1. USB OTG学习笔记

    仅仅看了半天SPEC写的笔记,有些乱,等调试完毕再次整理,思路不是很成熟,推测成分较多,可能有不对的地方,欢迎拍砖交流指正.   1. 概要     OTG设备使用插头中的ID引脚来区分A/B Dev ...

  2. Problem 7

    Problem 7 # Problem_7.py """ By listing the first six prime numbers: 2, 3, 5, 7, 11, ...

  3. [LeetCode] 347. 前K个高频元素

    python 版方法1:链表 class Solution(object): def topKFrequent(self, nums, k): """ :type num ...

  4. 【POJ】3122 Pie [二分查找]

    题目地址:http://poj.org/problem?id=3122 二分每块饼的体积.为了保证精度,可以先二分半径的平方r*r,最后再乘以PI.要注意一点,要分的人数要包括自己,及f+1. #in ...

  5. Mysql 下DELETE操作表别名问题

    在用DELETE删除mysql数据库数据时采取一下两种方式: 方式一:DELETE FROM B_PROSON WHERE ID = 1; 不使用别名 方式二:DELETE BP FROM B_PRO ...

  6. HDU 5172

    超内存了,呃...不知道如何优化了. 首先要判断区间的和是否和1~n的和相等. 再个,记录下每个数字前一次出现的位置,求这些位置的最大值,如果小于左端点,则表示有这样的一个序列. 呃~~~第二个条件当 ...

  7. python 并发编程入门

    多进程 在Unix/Linux下,为我们提供了类似c中<unistd.h>头文件里的的fork()函数的接口,这个函数位于os模块中,相同与c中类似,对于父进程fork()调用返回子进程I ...

  8. Autodesk 举办的 Revit 2015 二次开发速成( 1.5 天),教室培训, 地点武汉

    2014年8月26日9:00 – 17:00 2014年8月27日9:00 – 12:00 培训地点: Ø 湖北工业大学 实训楼605教室 Ø 地址:武汉市武昌区南湖李家墩一村一号 Ø 交通路线说明: ...

  9. VM网络连接设置具体解释

    參考http://zhidao.baidu.com/link? url=NU8UcLsp6CCgRZzeMgnb7v0p7Z78eLYloYW355Z9fQa__pm_lFBtpfSs61ZR2Wq2 ...

  10. mybatis、spring、mysql、maven实现简单增删查改

    之前写过的mybatis博客作为学习mybatis.spring还是不太合适. 现在找到一个不错的例子,首先将这个完整的mybatis增删查改例子在本地上实现出来,然后再进行学习. 项目结构与运行结果 ...