ContestHunter暑假欢乐赛 SRM 15
2024-08-21 17:20:23
菜菜给题解,良心出题人!但我还是照常写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 ;
}
最新文章
- 浏览器与HTML5的相辅相成
- JAVA thread0.interrupt()方法
- Java_Servlet 中文乱码问题及解决方案剖析
- 深入理解java虚拟机【内存溢出实例】
- PowerShell实现文件下载(类wget)
- 4. 星际争霸之php设计模式--工厂方法模式
- c#中如何不通过后台直接用js筛选gridview中的数据条件筛选查询?
- linux ssh 无密码登陆
- CSS3 背景
- php:检测用户当前浏览器是否为IE浏览器
- 【.NET】Repeater控件简单的数据绑定(有bool,日期,序号)
- Python基础之字符编码
- Gym 101908C - Pizza Cutter - [树状数组]
- JavaScript中对象和数组的深拷贝
- 小程序中通过判断id来删除数据,当数据长度为0时,显示隐藏部分(交流QQ群:604788754)
- selenium中切换浏览器不同tab 的操作
- cent6.x配置主机名及静态网络
- NLP笔记:词向量和语言模型
- lunix 项目部署 *****
- scala编程第16章学习笔记(1)
热门文章
- Kotlin的密封(Sealed)类:超强的枚举(KAD 28)
- ADO.NET基础学习-----四种模型,防止SQL注入
- 【shell 每日一练6】初始化安装Mysql并修改密码
- vim—自动缩进(编写Python脚本)
- [问题] docker: Failed to start Docker Application Container Engine.
- 局部加权回归(LWR) Matlab模板
- “Hello world!”团队—选题展示
- iOS-创建UIScrollerView(封装UIScrollerView)
- noauth authentication required redis
- [C/C++] C/C++错题集