菜菜给题解,良心出题人!但我还是照常写SRM一句话题解吧...

  T1经典题正解好像是贪心...我比较蠢写了个DP,不过还跑的挺快的

  f[i]=min( f[j-a[j]-1] )+1  { j+a[j]>=i , j<=i }

  这个显然就是查询一个后缀的最小值,倒着做BIT查前缀就行了

  T2建一个超级源点做MST就行了

  T3是一个模拟题,首先预处理出所有数在当前位置是小于坐标还是大于坐标,也就是随着向左挪一格是对答案贡献是增还是减,同时可以算出对答案贡献从增变减或从减变增的分界点,做差分。再扫一遍的时候,照常差分的同时将第一个数跑到最后一个数做一个特殊的处理,不然不好写。特殊处理就是把now减去2,因为第一个数在1位置一定对答案是增,而到n的时候变减了,至于之后状态的改变就靠差分了,所以这个数对答案的贡献从增变成了减,一下-2,但是在算当前答案的时候实际上只少了1,于是计算当前答案我们再把1给他加回去...

  看起来就很乱,因为是个比较复杂的模拟题,再加上我写的丑+表达能力不好QAQ

  T3看代码吧...或者去向CYC学习一波,他的T3比我快到不知道哪里去了

#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#define ll long long
using namespace std;
int n,x,a[],chafen[],fangan;
ll xz,zeng,ans;
void read(int &k)
{
int f=;k=;char c=getchar();
while(c<''||c>'')c=='-'&&(f=-),c=getchar();
while(c<=''&&c>='')k=k*+c-'',c=getchar();
k*=f;
}
int abs(int x){return x>=?x:-x;}
int main()
{
read(n);
for(int i=;i<=n;i++)
read(a[i]);
for(int i=;i<=n;i++)
{
if(a[i]>=i)
{
chafen[a[i]-i]++;
xz+=a[i]-i;
zeng--;
}
else
{
chafen[a[i]+n-i]++;
xz+=i-a[i];
zeng++;
}
}
ans=xz;
for(int i=;i<n;i++)
{
zeng+=chafen[i-]*-;
xz+=abs(a[n-i+]-)-abs(a[n-i+]-n)++zeng;
ans=min(ans,xz);
}
printf("%lld",ans);
return ;
}

ContestHunter暑假欢乐赛 SRM 15的更多相关文章

  1. ContestHunter暑假欢乐赛 SRM 04

    逃了一场SRM(躺 A题可以看成0点到1点,有p的几率从0到1,1-p几率不动,求0到1的期望步数.很显然概率是不降序列数/n!,然后列个方程E[0] = E[0] * (1 - p) + 1,解得E ...

  2. ContestHunter暑假欢乐赛 SRM 02

    惨不忍睹 3个小时都干了些什么... 日常按顺序从A题开始(难度居然又不是递增的 第一眼A题就觉得很简单...写到一半才发现woc那是个环.感觉一下子复杂了,按照链的方法扩展的话要特判很多东西... ...

  3. ContestHunter暑假欢乐赛 SRM 01 - 儿童节常数赛 爆陵记

    最后15min过了两题...MDZZ 果然是不适合OI赛制啊...半场写完三题还自信满满的,还好有CZL报哪题错了嘿嘿嘿(这算不算犯规了(逃 悲惨的故事*1....如果没有CZL的话T1 10分 悲惨 ...

  4. ContestHunter暑假欢乐赛 SRM 09(TJM大傻逼选手再创佳绩)

    T1 f[i]为前i页最少被撕几页,用二分转移就行了,答案为ans=min(f[i]+(n-i)); 不知道为什么写挂了嗯 二分的l初始应该是0 T2 数位DP f[i][1/0][1/0][1/0] ...

  5. ContestHunter暑假欢乐赛 SRM 08

    rating再次跳水www A题贴HR题解!HR智商流选手太强啦!CYC也好强%%%发现了len>10大概率是Y B题 dp+bit优化,据LLQ大爷说splay也可以优化,都好强啊.. C题跑 ...

  6. ContestHunter暑假欢乐赛 SRM 06

    T1二分check...为什么这么显然的我没看出来TAT,还在想倒着加入并查集check什么的,题写太多思维定势啦QAQ T2是NOIP题的弱化版...当时没看出来,写了个DP.可以看出这一位比上一位 ...

  7. ContestHunter暑假欢乐赛 SRM 05

    T1 组合数,求一下乘法逆元就行了 没取模 没1LL* 爆零了 T2 让最大子段和最小就行,跑最大子段和的时候若超过S就弹出堆中最大的数,每次有负数加进来不断弹出最小的数相加重新加进堆直到为正数,因为 ...

  8. ContestHunter暑假欢乐赛 SRM 03

    你们也没人提醒我有atcoderQAQ... A题曼哈顿距离=欧拉距离就是在同一行或者同一列,记录下i,j出现过的次数,减去就行,直接map过. B题一开始拿衣服了,一直以为排序和不排序答案是一个样的 ...

  9. CH暑假欢乐赛 SRM 07 天才麻将少女KPM(DP+treap)

    首先LIS有个$O(n^2)$的DP方法 $f(i,j)$表示前i个数,最后一个数<=j的LIS 如果$a_i!=0$则有 如果$a_i=0$则有 注意因为$f(i-1,j)\leq f(i-1 ...

随机推荐

  1. 「日常训练」Watering Flowers(Codeforces Round #340 Div.2 C)

    题意与分析 (CodeForces 617C) 题意是这样的:一个花圃中有若干花和两个喷泉,你可以调节水的压力使得两个喷泉各自分别以\(r_1\)和\(r_2\)为最远距离向外喷水.你需要调整\(r_ ...

  2. C for阶乘

    #include <stdio.h> int main(int argc, char **argv) { //定义三个变量 x n s ,n s的初始值为1;      int x;  i ...

  3. Android开发-API指南-<permission-tree>

    <permission-tree> 英文原文:http://developer.android.com/guide/topics/manifest/permission-tree-elem ...

  4. leetcode个人题解——#22 Generate Parentheses

    思路: 递归解决,如果左括号个数小于右括号或者左括号数小于总括号对数,则生成一个左括号,如果左括号数大于右括号,生成一个右括号. class Solution { public: vector< ...

  5. C语言struct中的长度可变数组(Flexible array member)

    C_struct中的长度可变数组(Flexible array member) Flexible array member is a feature introduced in the C99 sta ...

  6. 硬件PCB Layout布局布线Checklist检查表(通用版)

    按部位分类 技术规范内容 1 PCB布线与布局 PCB布线与布局隔离准则:强弱电流隔离.大小电压隔离,高低频率隔离.输入输出隔离.数字模拟隔离.输入输出隔离,分界标准为相差一个数量级.隔离方法包括:空 ...

  7. MFC常用数据类型

    下面这些是和Win32程序共同使用的数据类型BOOL:布尔值,取值为TRUE or FALSEBSTR:32-bit 字符指针BYTE:8-bit整数,未带正负号COLORREF:32-bit数值,代 ...

  8. 最多水容器(M)

    题目 给定n个非负整数a 1,a 2,...,a n,其中每个代表坐标(i,a i)处的一个点.绘制n条垂直线,使得线i的两个端点处于(i,a i)和(i,0)处.找到两条线,它们与x轴一起形成一个容 ...

  9. <Effective C++>读书摘要--Inheritance and Object-Oriented Design<一>

    1.Furthermore, I explain what the different features in C++ really mean — what you are really expres ...

  10. 使用Quartz.Net同时执行多个任务

    在Quartz.Net中可能我们需要在某一时刻执行多个任务操作,而又不想创建多个任务.Quartz.Net为我们提供了多个ScheduleJob的重载来实现多个一次执行多个任务. // 创建一个组任务 ...