zoukankan      html  css  js  c++  java
  • 【BZOJ】【3613】【HEOI2014】南园满地堆轻絮

    思路题


       考试结束前5、6min的时候想到……但是写挂了QAQ

      其实就是(差值最大的逆序对之差+1)/2;

      找逆序对其实维护一个max直接往过扫就可以了……因为逆序对是前面的数大于后面的数……

      正确性显然?就是蛮显然的啊= =

     1 /**************************************************************
     2     Problem: 3613
     3     User: Tunix
     4     Language: C++
     5     Result: Accepted
     6     Time:6136 ms
     7     Memory:1272 kb
     8 ****************************************************************/
     9  
    10 //Huce #6 D
    11 #include<vector>
    12 #include<cstdio>
    13 #include<cstdlib>
    14 #include<cstring>
    15 #include<iostream>
    16 #include<algorithm>
    17 #define rep(i,n) for(int i=0;i<n;++i)
    18 #define F(i,j,n) for(int i=j;i<=n;++i)
    19 #define D(i,j,n) for(int i=j;i>=n;--i)
    20 using namespace std;
    21  
    22 int getint(){
    23     int v=0,sign=1; char ch=getchar();
    24     while(ch<'0'||ch>'9') {if (ch=='-') sign=-1; ch=getchar();}
    25     while(ch>='0'&&ch<='9') {v=v*10+ch-'0'; ch=getchar();}
    26     return v*sign;
    27 }
    28 typedef long long LL;
    29 const int N=5000010,INF=~0u>>2;
    30 /*******************tamplate********************/
    31 LL n,sa,sb,sc,sd,a[3],MOD;
    32 inline LL Fx(int x){
    33     return (sa*x%MOD *x%MOD*x%MOD+sb*x%MOD*x%MOD+sc*x%MOD+sd)%MOD;
    34 }
    35  
    36 int main(){
    37 #ifndef ONLINE_JUDGE
    38     freopen("D.in","r",stdin);
    39 //  freopen("output.txt","w",stdout);
    40 #endif
    41     n=getint(); sa=getint(); sb=getint(); sc=getint(); 
    42     sd=getint(); a[1]=getint(); MOD=getint(); 
    43     LL mx=a[1],ans=0;
    44     F(i,2,n){
    45         a[i%3]=(Fx(a[(i-1)%3])+Fx(a[(i-2)%3]))%MOD;
    46         ans=max(mx-a[i%3],ans);
    47         mx=max(mx,a[i%3]);
    48     }
    49     printf("%d
    ",(ans+1)/2);
    50     return 0;
    51 }
    View Code

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

    Time Limit: 50 Sec  Memory Limit: 256 MB
    Submit: 158  Solved: 102
    [Submit][Status][Discuss]

    Description

    小 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]…A[n],
    那么 目标是求另一个正整数数列 B[1]…B[n], 使得对于任意的 1≤i<n 有 B[i] ≤B[i+1],
    而且使得 Ans = Max{|A[j]-B[j]|,1≤j≤n}尽量 小。  小 Z 很快就想清楚了做法,但是鉴于他还忙着写诗,
    所以这个任务就交给了你。 

    Input

    由于数据规模可能较大,因此采用如下方式生成数据。

     每个数据包含 6 个数:n,Sa,Sb,Sc,Sd,A[1],Mod,意为共有 n 个音符,第一个音符为 A[1]。
     生成规则如下: 定义生成函数 F(x) = Sa*x^3 + Sb*x^2 + Sc*x + Sd; 
    那么给出递推公式 A[i] = F(A[i-1]) + F(A[i-2]),此处规定 A[0] = 0. 
    由于中间过程的数可能会特别大,所以要求每一步与 A 中的每个数都对一个给定的数 Mod 取模。

    Output

    输出一行,包含一个正整数 Ans。 

     

    Sample Input

    3 815 6901 3839 178 199 10007

    Sample Output

    1334

    HINT

      n≤5000000 


    对于 100%的数据, Sa,Sb,Sc,Sd,A[1] ≤10000, Mod≤1000000007 


    样例中生成的数列为:  

    199 4568 1901,此时将 4568 修改为 3234,1901 也修改为 3234 即可,代价为 1334。 

    Source

    [Submit][Status][Discuss]
  • 相关阅读:
    mysql5.7创建用户授权删除用户撤销授权
    什么是分表和分区 MySql数据库分区和分表方法
    linux命令大全之watch命令详解(监测命令运行结果)
    netstat统计的tcp连接数与⁄proc⁄pid⁄fd下socket类型fd数量不一致的分析
    ss is one another utility to investigate sockets(特适合大规模tcp链接)
    /proc/net/sockstat 里的信息是什么意思?
    linux平台下server运维问题分析与定位
    strace命令解析
    MySQL常见错误代码及代码说明
    自动化部署必备技能—定制化RPM包
  • 原文地址:https://www.cnblogs.com/Tunix/p/4448300.html
Copyright © 2011-2022 走看看