【洛谷】【洛谷月赛】4月月赛Round 1/2
洛谷月赛“月”来“月”丧了,一月更比一月丧,做得我十分不“月”……
4月的两轮月赛,都只会T1,就写一下吧,等待后续更新……
先看看Round1的T1:
【R1T1】
网址:点我
【题意简述】
给定一个长度为n的序列,其中的元素均是1~m之间的正整数。
要求从中选出k个数,交换它们的位置,其他未被选中的数保持不变,使得变换后的序列中,相等的数总是排在一段连续区间。
要求最小化k。
1<=n<=105,1<=m<=20
【思路】
①想到枚举这n个数的全排列,对每个满足条件的全排列进行计算,更新答案。dfs的中途可以把已经不满足的递归树切掉,优化一下。时间复杂度O(n!*n),期望得分20。
②发现因为最后的序列一定是m个连续的相同段组成,考虑枚举m的全排列,这样可以保证答案合法,再统计。时间复杂度O(m!*n),期望得分40。
③对于②算法,可以用m个桶记录下原序列的前缀和,记sum[i][j]为序列1~i位中数j的个数,则一段区间[l,r]内不是j的个数为sum[r][j]-sum[l-1][j],把最后的统计优化到m。时间复杂度O(m!*m),期望得分70。
④考虑对③进行优化,发现有特殊的最优子结构性质。在③中,针对两个m的全排列,如果它们的前i位的数相同,但是可以有不同的顺序。
例如:1,5,3,2,4和2,5,1,3,4,它们的前4位数相同,但是顺序不一定要相同。它们的前4位在原序列中的长度相同。对于第5位,没有必要枚举所有的前四位的全排列,只需要在数相同的全排列中寻找最小值即可。
即对于一个k最优的解,它对应的m的全排列是P,P的前i位记作Pi。必然有Pi是所有Pi的全排列中的最优解。即最优子结构性质。
考虑进行状压dp,用f[S]表示集合S的全排列对应到原序列的前面若干位中的最优解。S只可能包含1~m之间的正整数。
则f[S]=min( f[S-k] + (sum[r(S)][k]-sum[r(S-k)][k]) ) k∈S。sum数组即③中sum数组,r(S)表示集合S(表示一个m的排列)对应到原序列中的长度。
时间复杂度O(2m*m),期望得分100。
【代码】
#include<cstdio>
#define F(i,a,b) for(int i=a;i<=b;++i)
#define F2(i,a,b) for(int i=a;i<b;++i)
int n,m,num[],sum[][],f[<<];
inline int Max(int p,int q){return p>q?p:q;}
void init(){
int x;
scanf("%d%d",&n,&m);
F(i,,n) scanf("%d",&x),sum[i][x-]=,++num[x-];
F2(j,,m) F(i,,n) sum[i][j]+=sum[i-][j];
}
int main(){
init();
int s;
F2(S,,<<m){
s=;
F2(i,,m)
if((S>>i)&)s+=num[i];
F2(i,,m)
if((S>>i)&)f[S]=Max(f[S],f[S^(<<i)]+sum[s][i]-sum[s-num[i]][i]);
}
printf("%d",n-f[(<<m)-]);
return ;
}
我这里是f[S]表示最多的不动元素,会稍微好算一点点……原理不变。
R1接下来的就不会了,都是大丧题。
【R2T1】
网址:点我
【题意简述】
给定n,对于x=1~n,求出 \(\sum_{i=1}^{n}x\;mod\;n\) 。
【思路】
就直接讲吧,我先打出了这样一个表格:
第 i 行第 j 列表示 i mod j 的值。
从左往右竖着看,第1列是0,第2列重复1,0循环,第3列重复1,2,0循环……
每加入一列,就给总结果加上了若干个等差数列。
对于等差数列的加法,可以用两次差分,最后两次前缀和的方法把其变为常数时间。
总共要进行 \(\sum_{i=1}^{n}\frac{n}{i}\;=\;n\;ln(n)\) 次差分。时间复杂度O(n*lnn)。
【代码】
#include<cstdio>
long long n,a[];
int main(){
scanf("%d",&n);
for(int i=;i<=n;++i){
for(int j=;j<=n;j+=i)
a[j]-=i,a[j+]+=i;
++a[];
}
for(int i=;i<=n;++i) a[i]=a[i-]+a[i];
a[]=;
for(int i=;i<=n;++i) a[i]=a[i-]+a[i];
for(int i=;i<=n;++i) printf("%lld ",a[i]);
return ;
}
【洛谷】【洛谷月赛】4月月赛Round 1/2的更多相关文章
- 洛谷4月月赛R2
洛谷4月月赛R2 打酱油... A.koishi的数学题 线性筛约数和就可以\(O(N)\)了... #include <iostream> #include <cstdio> ...
- 洛谷3月月赛 R1 Step! ZERO to ONE
洛谷3月月赛 R1 Step! ZERO to ONE 普及组难度 290.25/310滚粗 t1 10分的日语翻译题....太难了不会... t2 真·普及组.略 注意长为1的情况 #include ...
- 【洛谷5月月赛】玩游戏(NTT,生成函数)
[洛谷5月月赛]玩游戏(NTT,生成函数) 题面 Luogu 题解 看一下要求的是什么东西 \((a_x+b_y)^i\)的期望.期望显然是所有答案和的平均数. 所以求出所有的答案就在乘一个逆元就好了 ...
- 【LGR-054】洛谷10月月赛II
[LGR-054]洛谷10月月赛II luogu 成功咕掉Codeforces Round #517的后果就是,我\(\mbox{T4}\)依旧没有写出来.\(\mbox{GG}\) . 浏览器 \( ...
- 【LGR-051】洛谷9月月赛
[LGR-051]洛谷9月月赛 luogu 签到题 description 给出\(K\)和质数\(m\),求最小的\(N\)使得\(111....1\)(\(N\)个\(1\))\(\equiv k ...
- 「LGR-049」洛谷7月月赛 D.Beautiful Pair
「LGR-049」洛谷7月月赛 D.Beautiful Pair 题目大意 : 给出长度为 \(n\) 的序列,求满足 \(i \leq j\) 且 $a_i \times a_j \leq \max ...
- 洛谷9月月赛round2
洛谷9月月赛2 t1 题意:懒得说了 分析:模拟 代码: program flag; var a:..,..]of char; n,i,m,j,x,y,ans,k:longint; begin ass ...
- 「P4996」「洛谷11月月赛」 咕咕咕(数论
题目描述 小 F 是一个能鸽善鹉的同学,他经常把事情拖到最后一天才去做,导致他的某些日子总是非常匆忙. 比如,时间回溯到了 2018 年 11 月 3 日.小 F 望着自己的任务清单: 看 iG 夺冠 ...
- 「P4994」「洛谷11月月赛」 终于结束的起点(枚举
题目背景 终于结束的起点终于写下句点终于我们告别终于我们又回到原点…… 一个个 OIer 的竞赛生涯总是从一场 NOIp 开始,大多也在一场 NOIp 中结束,好似一次次轮回在不断上演.如果这次 NO ...
- 「LuoguP4995」「洛谷11月月赛」 跳跳!(贪心
题目描述 你是一只小跳蛙,你特别擅长在各种地方跳来跳去. 这一天,你和朋友小 F 一起出去玩耍的时候,遇到了一堆高矮不同的石头,其中第 ii 块的石头高度为 h_ihi,地面的高度是 h_0 = 0 ...
随机推荐
- app流畅度测试--使用SM
通过测量应用的帧率FPS并不能准确评价App的流畅度,FPS较低并不能代表当前App在UI上界面不流畅,而1s内VSync这个Loop运行了多少次更加能说明当前App的流畅程度. 那么我们可以直接在A ...
- js 添加事件兼容性
var tools = { //添加事件 addHandle: function (e, type, handle) { if (e.addEventListener) { e.addEventLis ...
- HDU4734——2013 ACM/ICPC Asia Regional Chengdu Online
今天做的比赛,和队友都有轻微被虐的赶脚. 诶,我做的题就是这个题目了. 题目描述就是对于一个十进制数数位上的每一位当做一个二进制位来求出这个数,这个定义为G(x). 题目给定你A和B,求在0-B范围内 ...
- WEB javaScript
javaScript 1.常规方法document.write("内容") :书写内容到网页中window.alert("内容") :网页警告弹窗 2.使用方法 ...
- BZOJ5100 POI2018Plan metra(构造)
容易发现要么1和n直接相连,要么两点距离即为所有dx,1+dx,n的最小值.若为前者,需要满足所有|d1-dn|都相等,挂两棵菊花即可.若为后者,将所有满足dx,1+dx,n=d1,n的挂成一条链,其 ...
- PowerDesigner在生成SQL时报错Generation aborted due to errors detected during the verification of the mod
一.本章节要用到 ODBC连接数据库直接创建表,请先创建连接库的ODBC 请参考 新建 http://www.cnblogs.com/wdw31210/p/7580286.html 二.生成 去 ...
- 如何添加ORACLE 的 ODBC
找到 C:\windows\SysWOW64\odbcad32.exe 新增odbc ,提示 报错忽略,一直点确定就是,会建成功的! 点OK即可.新建完毕
- 一个非典型的Linux路由配置方案
上周帮人解决了一个问题,这个问题绝对是非典型性的,采用了非常规的方法.虽然最终的方案非常不符合常规,非常不通用,充满了各种藏得很深的技巧或者说是trick,但是这个问题却是一个学习Linux路由的绝好 ...
- 洛谷 P4009 汽车加油行驶问题 解题报告
P4009 汽车加油行驶问题 题目描述 给定一个\(N×N\)的方形网格,设其左上角为起点◎,坐标(1,1) ,\(X\)轴向右为正,\(Y\)轴向下为正,每个方格边长为1 ,如图所示. 一辆汽车从起 ...
- 2017 3 11 分治FFT
考试一道题的递推式为$$f[i]=\sum_{j=1}^{i} j^k \times (i-1)! \times \frac{f[i-j]}{(i-j)!}$$这显然是一个卷积的形式,但$f$需要由自 ...