A. 木板


一个很简单的数学题,简单推一下就好,路丽姐姐教你学数学。

将式子化出我们发现只需求出$i\times i/n$的个数

那么我们将$n$质因数分解,可知因子个数

为了整除$n$,令$i==\sqrt{n\times k} $,我们需要让$k$含有$n$中奇数个数的因子

然后同时还可以有其他的平方因子,直接爆求即可。

思路积累:

1.对于求$i\times i/n$可以从$n$的因子上下手

B. 打扫卫生


一个$DP$的大神题,考场被各种剪枝cao过

$ \%\%\%\%\%kx,Duanyue $线段树$AC$

$n^2$DP显然不说了

正解:

首先记清几个数组的定义:

$pre_{i}$表示当前遍历情况下权值为$i$的点的最近出现的位置

$pos_{j}$表示当前从$pos_{j}+1$到$i$之间不同的数字小于等于$j$的位置

$cnt_{j}$表示当前从$pos_{j}+1$到$i$之间不同的数字个数

然后分析题意,因为最坏情况下,我们分$n$段权值为$n$

所以对于每段的数字个数我们不能取过$\sqrt{n}$;

那么我们考虑转移:

但我们添加一个新的数时

假如他的$pre_{a_{i}}$大于当前枚举的$pos_{j}$,那么$a_{i}$已经不是第一次出现了

所以对$cnt_{j}$没有贡献

但是假如小于等于的话....显然此时$cnt_{j}++$可能大于$j$,所以此时$pos_{j}$要移动

那么在移动时我们要让$cnt_{j}--$,所以我们应该找到第一个$pre_{a_{pos_{j}}}$等于$pos_{j}$的

因为这样意味着我们将$pos_{j}$移到此处时,正好减去了一个元素,使元素不在$pos_{j}+1$到$i$出现

复杂度证明:

每个指针即每个$j$有$\sqrt{n}$个且最多移动$n$次。

#include<bits/stdc++.h>
#define MAXN 41000
using namespace std;
int read(){
int x=0;char c=getchar();int ff=1;
while(c<'0'||c>'9'){if(c=='-')ff=-1;c=getchar();}
while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
return x*ff;
}
int pre[MAXN],cnt[MAXN],pos[MAXN],f[MAXN];int n,m;
int a[MAXN];
signed main(){
memset(f,0x3f3f3f,sizeof(f));
f[0]=0;
n=read();m=read();
for(int i=1;i<=n;++i)a[i]=read();
for(int i=1;i<=n;++i){
for(int j=1;j<=sqrt(n);++j){
//printf("pre[%d]=%d\n",a[i],pre[a[i]]);
if(pre[a[i]]<=pos[j]){
cnt[j]++;
if(cnt[j]>j){
pos[j]++;
while(pre[a[pos[j]]]>pos[j]){
pos[j]++;
}
cnt[j]=j;
}
}
f[i]=min(f[pos[j]]+cnt[j]*cnt[j],f[i]);
//printf("f[%d]=%d pos[%d]=%d\n",i,f[i],j,pos[j]);
}
pre[a[i]]=i;
}
printf("%d\n",f[n]);
}

思路积累

1.考场能减的枝一定要减,万一A了呢.....

2.对于题意性质转化,因为有很多区间的值的贡献是一样的,因为题中答案是$cnt^2$,考虑枚举$\sqrt{n}$的值

「10.12」木板(数学)·打扫卫生(神仙DP)的更多相关文章

  1. 「10.19」最长不下降子序列(DP)·完全背包问题(spfa优化DP)·最近公共祖先(线段树+DFS序)

    我又被虐了... A. 最长不下降子序列 考场打的错解,成功调了两个半小时还是没A, 事实上和正解的思路很近了,只是没有想到直接将前$D$个及后$D$个直接提出来 确实当时思路有些紊乱,打的时候只是将 ...

  2. 「GXOI / GZOI2019」宝牌一大堆 (DP)

    题意 LOJ传送门 题解 可以发现「七对子」 和 「国士无双」直接暴力就行了. 唯一的就是剩下的"3*4+2". 考试的时候写了个爆搜剪枝,开了O2有50pts.写的时候发现可以D ...

  3. LOJ #2541. 「PKUWC 2018」猎人杀(容斥 , 期望dp , NTT优化)

    题意 LOJ #2541. 「PKUWC 2018」猎人杀 题解 一道及其巧妙的题 , 参考了一下这位大佬的博客 ... 令 \(\displaystyle A = \sum_{i=1}^{n} w_ ...

  4. 「10.8」simple「数学」·walk「树上直径」

    A. Simple 本来以为很难,考场瞎推了推好像会了...... 想起小凯的诱惑,迷?? 首先$n$,$m$,$q$同除$gcd(n,m)$,显然$q$以内的数假如不是$gcd$的倍数,那么一定不能 ...

  5. 2018.10.19 bzoj1584: Cleaning Up 打扫卫生(线性dp)

    传送门 dp妙题. 考虑到每个位置分一组才花费nnn的贡献. 因此某一段不同的数的个数不能超过sqrt(n)sqrt(n)sqrt(n),于是对于当前的位置iii我们记pos[j]pos[j]pos[ ...

  6. 「10.29」数列(exgxd)·数对(线段树优化DP)·最小距离(最短路,树上直径思想)

    好久没碰到这么友好乱搞的题了.... A. 数列 考察的是exgcd的相关知识,最后的答案直接O(1)求即可 B. 数对 本来以为是原题,然后仔细看了看发现不是,发现不会只好乱搞骗分了 事实上直接按$ ...

  7. 「10.28」Dove 打扑克(链表)·Cicada 与排序(概率)·Cicada 拿衣服(各种数据结构)

    A. Dove 打扑克 考场思考半天线段树树状数组,没有什么想法 打完暴力后突然想到此题用链表实现会很快. 因为只有$n$堆,所以设最多有$x$个不同的堆数,那么$x\times (x-1)/2==n ...

  8. 「10.14」小P的2048(模拟)·小P的单调数列(性质,DP)·小P的生成树(乱搞)

    A. 小P的2048 模拟.....又没啥可说的,以后要认真打打模拟题了... B. 小P的单调数列 考场$n^2log(n)$的SB思路有人听吗 正解当然不是这样, 事实上我们每次选取的只有一段区间 ...

  9. 「10.13」毛一琛(meet in the middle)·毛二琛(DP)·毛三琛(二分+随机化???)

    A. 毛一琛 考虑到直接枚举的话时间复杂度很高,我们运用$meet\ in\ the\ middle$的思想 一般这种思想看似主要用在搜索这类算法中 发现直接枚举时间复杂度过高考虑枚举一半另一半通过其 ...

随机推荐

  1. Xshell、Xftp评估过期的解决办法

    介绍一个     FTP客户端-IIS7服务器管理工具作为FTP客户端,它支持批量管理ftp站点.定时上传和定时下载,定时备份,且操作简洁.同时iis7服务器管理工具还是vnc客户端.并且支持批量管理 ...

  2. 多线程-4.wait() notify() notifyAll() 生产者消费者模型

    1.wait()方法 该方法继承于Object类.在调用obj.wait()方法后,当前线程会失去obj的锁.待其他线程调用obj.notify()或notifyAll()方法后进入锁等待池,争抢到锁 ...

  3. Django(17)orm查询操作

    前言 查找是数据库操作中一个非常重要的技术.查询一般就是使用filter.exclude以及get三个方法来实现.我们可以在调用这些方法的时候传递不同的参数来实现查询需求.在ORM层面,这些查询条件都 ...

  4. 技术博客:Azure Functions + Azure Storage 开发

    Azure GitHub wiki 同步发布 传送门 Azure Functions 通过 Functions(一个事件驱动型无服务器计算平台,还可以解决复杂的业务流程问题)更加高效地进行开发.在本地 ...

  5. 成功的多项目管理都有哪些"制胜之道"?

    实施多项目管理,一个重要原因就是提高项目的效率和管理水平.除了满足时间.成本.业绩和客户需求之外,项目管理办公室(PMO)经理的预期产出还包括有效利用组织资源.下面是影响多项目管理成功的几个关键因素, ...

  6. 5.配置IP

    静态IP配置 1.NAT模式设置 首先设置虚拟机中NAT模式的选项,打开VMware,点击"编辑"下的"虚拟网络编辑器",设置NAT参数 注意: VMware ...

  7. Linux USB ECM Gadget 驱动介绍

    ​1 USB ECM介绍 USB ECM,属于USB-IF定义的CDC(Communication Device Class)下的一个子类:Ethernet Networking Control Mo ...

  8. [bug] Unable to create initial connections of pool.

    原因1 pom中mysql依赖的版本不对,导致无法连接mysql 原因2 SSL设置问题 参考 https://blog.csdn.net/qq_26346457/article/details/79 ...

  9. [bug] MySQL-Front连接MySQL 8.0失败

    原因: MySQL-Front不支持MySQL 8.0的密码认证方式 解决: 在mysql安装目录中my.ini文件末尾添加 default_authentication_plugin=mysql_n ...

  10. centos下安装visual studio code-(来自官网)

    (https://code.visualstudio.com/docs/setup/linux) Running VS Code on Linux Installation 安装完成后可执行:$cod ...