• bzoj 3704 昊昊的机油之GRST 贪心dp,思维


    昊昊的机油之GRST

    Time Limit: 10 Sec  Memory Limit: 1024 MB
    Submit: 80  Solved: 33
    [Submit][Status][Discuss]

    Description

    昊昊有个好机油,他就是传说中的着力点。现在昊昊获得了一份长度为n的GRST牌(mod 4 意义下),打算作为送给好机油的生日礼物(不是在2月的么)。但是,昊昊深知他的机油是个神犇,作为数字控的他,只会喜欢特定的序列。但是昊昊不怕,他可以使用一次菲亚特(他的机油最喜欢的大招),将一段区间内的数字全部+1,若某个数字为3,则+1后变为0。但昊昊的神力是有限的,问从初始序列a到达最终序列b,最少需要使用多少次菲亚特。

    Input

    第一行一个正整数n,表示GRST长度。
    接下来两行,每行n个值,分别表示ai bi。

    Output

    仅一个数,即最少需要使用多少次菲亚特。

    Sample Input

    3
    0 2 1
    1 0 2

    Sample Output

    2

    HINT

    数据规模与约定

    样例说明:第一次对区间[1,2] 使用菲亚特。第二次对区间[2,3] 使用菲亚特。N<=10000000   , 0<=ai,bi<=3



    http://hzwer.com/3650.html
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 
     7 #define inf 1000000007
     8 #define N 10000007
     9 #define ll long long
    10 using namespace std;
    11 inline ll read()
    12 {
    13     ll x=0,f=1;char ch=getchar();
    14     while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
    15     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    16     return x*f;
    17 }
    18 
    19 int n,ans,tot;
    20 int a[N],b[N],c[N];
    21 int d[N],f[N];
    22 
    23 int main()
    24 {
    25     n=read();
    26     for(int i=1;i<=n;i++)a[i]=read();
    27     for(int i=1;i<=n;i++)b[i]=read();
    28     for(int i=1;i<=n;i++)
    29     {
    30         c[i]=b[i]-a[i];
    31         if(c[i]<c[i-1])c[i]+=(c[i-1]-c[i])/4*4;
    32         if(c[i]<c[i-1])c[i]+=4;
    33         f[i]=c[i]/4;
    34         d[i]=c[i]-c[i-1];
    35     }
    36     ans=c[n];f[n+1]=inf;
    37     tot=0;
    38     for(int i=1;i<=n;i++)
    39         if(d[i]==3&&f[i]>tot){d[i]-=4;ans-=3;tot++;}
    40     for(int i=1;i<=n;i++)c[i]=c[i-1]+d[i];
    41     for(int i=n;i;i--)f[i]=min(c[i]/4,f[i+1]);
    42     tot=0;
    43     for(int i=1;i<=n;i++)
    44         if(d[i]==2&&f[i]>tot){d[i]-=4;ans-=2;tot++;}
    45     for(int i=1;i<=n;i++)c[i]=c[i-1]+d[i];
    46     for(int i=n;i;i--)f[i]=min(c[i]/4,f[i+1]);
    47     tot=0;
    48     for(int i=n;i;i--)
    49         if(d[i]==1&&f[i]>tot){d[i]-=4;ans--;tot++;}
    50     printf("%d",ans);
    51 }
  • 相关阅读:
    说说JSON和JSONP,也许你会豁然开朗,含jQuery用例
    利用CSS3实现页面淡入动画特效
    ajax
    jQuery弹性滑动导航菜单实现思路及代码
    angular 管理后台
    jq简单选项卡
    按钮60秒倒计时
    jq倒计时
    angular ui-route
    flex弹性布局
  • 原文地址:https://www.cnblogs.com/fengzhiyuan/p/8287002.html
Copyright © 2020-2023  润新知