【JZOJ4788】【NOIP2016提高A组模拟9.17】序列
题目描述
输入
输出
样例输入
1 
5  
2 1 3 0 3 
2 2 0 1 0
样例输出
1
数据范围
 
解法
考虑没有模的情况,问题就仅仅只是简单的差分问题(广告铺设): 
设r[i]是第i位需要加的次数,令q[i]=r[i+1]−r[i]; 
则ans=sigma{max(q[i],0)}。
回到原问题; 
现在先求出每一位至少需要加多少次才能从a数组->b数组,得出r数组,继而得出初始的q数组。 
考虑模带来的影响是可以调整q数组使得获得更少的代价: 
具体如是:设给r数组的一个区间[l,r]全体+4,因为受模的作用所以是允许的。 
这相当与给q[l]-4,q[r]+4。
如果想让q获得更少的代价。 
分类讨论一下即可。
代码
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#define ll long long
#define fill(x) memset(x,0,sizeof(x))
#define ln(x,y) int(log(x)/log(y))
#define sqr(x) ((x)*(x))
using namespace std;
const char* fin="aP3.in";
const char* fout="aP3.out";
const int inf=0x7fffffff;
const int maxn=200007;
int t,n,i,j,k,ans,tt;
int a[maxn],b[maxn],c[maxn],d[maxn];
int tong[100];
int main(){
    scanf("%d",&t);
    for (;t;t--){
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(c,0,sizeof(c));
        memset(d,0,sizeof(d));
        memset(tong,0,sizeof(tong));
        tt=0;
        scanf("%d",&n);
        for (i=1;i<=n;i++) scanf("%d",&a[i]);
        for (i=1;i<=n;i++) scanf("%d",&b[i]);
        for (i=1;i<=n;i++){
            c[i]=(b[i]-a[i]+8)%4;
        }
        for (i=0;i<=n;i++) d[i]=c[i+1]-c[i],ans+=max(d[i],0);
        for (i=0;i<=n;i++){
            if (d[i]==-3) tong[1]++;
            else if (d[i]==-2) tong[2]++;
            else if (d[i]==2) {
                if (tong[1]){
                    tong[1]--;
                    ans--;
                    tt++;
                }
            }else if (d[i]==3){
                if (tong[1]){
                    tong[1]--;
                    ans-=2;
                }else if (tt){
                    tt--;
                    ans--;
                }else if (tong[2]){
                    tong[2]--;
                    ans--;
                }
            }
        }
        printf("%d\n",ans);
        ans=0;
    }
    return 0;
}启发
类似这样的问题可以利用差分解决。
【JZOJ4788】【NOIP2016提高A组模拟9.17】序列的更多相关文章
- [JZOJ4788] 【NOIP2016提高A组模拟9.17】序列
		题目 描述 题目大意 一个序列,每次可以使一段区间内的所有数加一(模四). 问最少的操作次数. 思考历程 一看这题目,诶,这不就是那道叫密码锁的题目吗? 然后随便打一打,样例过了,就再也没有思考这一题 ... 
- 【JZOJ4787】【NOIP2016提高A组模拟9.17】数格子
		题目描述 输入 输出 样例输入 1 10000 3 10000 5 10000 0 0 样例输出 1 11 95 数据范围 每个测试点数据组数不超过10组 解法 状态压缩动态规划. 设f[i][j]表 ... 
- 【NOIP2016提高A组模拟9.17】序列
		题目 分析 首先用\(a_i\)表示达到目标的步数\(B_i-A_i(mod 4)\) 根据粉刷栅栏,先不管mod 4的情况,答案就是\(\sum\max(a_i-a_{i+1},0)\) 那我们刚才 ... 
- NOIP2016提高A组模拟9.17总结
		第一题,典型的隔板问题, 但是我忘记隔板问题怎么打,一开始在花了1小时,还是没想出来,果断弃疗, 最后的40分钟,我打完了第二题,接着又用了20分钟推敲出一种极其猥琐的式子来代替,可惜预处理的阶乘忘记 ... 
- 【NOIP2016提高A组模拟9.17】数格子
		题目 分析 设表示每一行的状态,用一个4位的二进制来表示,当前这一行中的每一个位数对下一位有没有影响. 设\(f_{i,s}\)表示,做完了的i行,其状态为s,的方案数. 两个状态之间是否可以转移就留 ... 
- 【NOIP2016提高A组模拟9.17】小a的强迫症
		题目 分析 题目要求第i种颜色的最后一个珠子要在第i+1种颜色的最后一个珠子之前, 那么我们从小到大枚举做到第i种,把第i种的最后一颗珠子取出,将剩下的\(num(i)-1\)个珠子插入已排好的前i- ... 
- 【NOIP2016提高A组模拟8.17】(雅礼联考day1)总结
		考的还ok,暴力分很多,但有点意外的错误. 第一题找规律的题目,推了好久.100分 第二题dp,没想到. 第三题树状数组.比赛上打了个分段,准备拿60分,因为时间不够,没有对拍,其中有分段的20分莫名 ... 
- 【NOIP2016提高A组模拟8.17】(雅礼联考day1)Binary
		题目 分析 首先每个数对\(2^i\)取模.也就是把每个数的第i位以后删去. 把它们放进树状数组里面. 那么当查询操作, 答案就位于区间\([2^i-x,2^{i-1}-1-x]\)中,直接查询就可以 ... 
- 【NOIP2016提高A组模拟8.17】(雅礼联考day1)Value
		题目 分析 易证,最优的答案一定是按\(w_i\)从小到大放. 我们考虑dp, 先将w从小到大排个序,再设\(f_{i,j}\)表示当前做到第i个物品,已选择了j个物品的最大值.转移就是\[f_{i, ... 
随机推荐
- c++设计模式:模板模式
			模板模式和策略模式的区别: 模板方法模式的主要思想:定义一个算法流程,将一些特定步骤的具体实现.延迟到子类.使得可以在不改变算法流程的情况下,通过不同的子类.来实现“定制”流程中的特定的步骤. 策略模 ... 
- centos 6.8 搭建禅道 Linux一件安装、进程自起
			禅道官网:http://www.zentao.net/ linux一键安装包内置了apache, php, mysql这些应用程序,只需要下载解压缩即可运行禅道.Linux 64位一键安装包(适用于L ... 
- HDU3374 字符串最大最小表示法模板
			一开始没太看懂什么意思,拿笔反复推了一遍才大概知道最大最小表示法是怎么求的,感觉太神奇了... #include <iostream> #include <cstdio> #i ... 
- uwsgi: invalid option -- 'x'
			安装:pip install uwsgi 启动:uwsgi -x 'uwsgi.xml'报错:uwsgi: invalid option -- 'x' 原因:centos下,在没有安装libxml2时 ... 
- odoo 8.0 多核启用
			对于很多企业来说,随着时间的推移,用户量或者企业建点扩张,使用erp就会出现应用访问越来越慢的情况, 其实这种情况不但限于erp,只要是有数据量增长的互联网业务必然会遇到的,因为一开始的是就没有做好大 ... 
- JS引擎查找属性的原理
			原型继承的原理 不断向上查找 funciton getProperty(obj,prop){ if(obj.hasOwnProperty(prop){ return obj[prop]; }else ... 
- 20190716-T1-礼物
			呵呵,我暴力WA了 这个题充分考验了大家对数学的理解(麦蒙大多在胡诌) 但是确实如此啊. 看数据范围想状压.(我额嗯嗯想到暴力?) 然后设出一个可爱的$dp$式(主语当然不是我,是出题人大佬) $f_ ... 
- 标记扩展和 WPF XAML
			本主题介绍 XAML 的标记扩展概念,包括其语法规则.用途以及底层的类对象模型. 标记扩展是 XAML 语言以及 XAML 服务的 .NET 实现的常规功能. 本主题专门详细论述了用于 WPF X ... 
- C# 多线程操作之异步委托
			标签: 多线程任务nullstringhtml工作 2012-06-29 23:00 1276人阅读 评论(0) 收藏 举报 分类: C/C++/C#/dotnet(126) 目录(?)[+] ... 
- POJ2182Lost Cows
			Lost Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11946 Accepted: 7690 Descri ... 
