洛谷月赛“月”来“月”丧了,一月更比一月丧,做得我十分不“月”……

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的更多相关文章

  1. 洛谷4月月赛R2

    洛谷4月月赛R2 打酱油... A.koishi的数学题  线性筛约数和就可以\(O(N)\)了... #include <iostream> #include <cstdio> ...

  2. 洛谷3月月赛 R1 Step! ZERO to ONE

    洛谷3月月赛 R1 Step! ZERO to ONE 普及组难度 290.25/310滚粗 t1 10分的日语翻译题....太难了不会... t2 真·普及组.略 注意长为1的情况 #include ...

  3. 【洛谷5月月赛】玩游戏(NTT,生成函数)

    [洛谷5月月赛]玩游戏(NTT,生成函数) 题面 Luogu 题解 看一下要求的是什么东西 \((a_x+b_y)^i\)的期望.期望显然是所有答案和的平均数. 所以求出所有的答案就在乘一个逆元就好了 ...

  4. 【LGR-054】洛谷10月月赛II

    [LGR-054]洛谷10月月赛II luogu 成功咕掉Codeforces Round #517的后果就是,我\(\mbox{T4}\)依旧没有写出来.\(\mbox{GG}\) . 浏览器 \( ...

  5. 【LGR-051】洛谷9月月赛

    [LGR-051]洛谷9月月赛 luogu 签到题 description 给出\(K\)和质数\(m\),求最小的\(N\)使得\(111....1\)(\(N\)个\(1\))\(\equiv k ...

  6. 「LGR-049」洛谷7月月赛 D.Beautiful Pair

    「LGR-049」洛谷7月月赛 D.Beautiful Pair 题目大意 : 给出长度为 \(n\) 的序列,求满足 \(i \leq j\) 且 $a_i \times a_j \leq \max ...

  7. 洛谷9月月赛round2

    洛谷9月月赛2 t1 题意:懒得说了 分析:模拟 代码: program flag; var a:..,..]of char; n,i,m,j,x,y,ans,k:longint; begin ass ...

  8. 「P4996」「洛谷11月月赛」 咕咕咕(数论

    题目描述 小 F 是一个能鸽善鹉的同学,他经常把事情拖到最后一天才去做,导致他的某些日子总是非常匆忙. 比如,时间回溯到了 2018 年 11 月 3 日.小 F 望着自己的任务清单: 看 iG 夺冠 ...

  9. 「P4994」「洛谷11月月赛」 终于结束的起点(枚举

    题目背景 终于结束的起点终于写下句点终于我们告别终于我们又回到原点…… 一个个 OIer 的竞赛生涯总是从一场 NOIp 开始,大多也在一场 NOIp 中结束,好似一次次轮回在不断上演.如果这次 NO ...

  10. 「LuoguP4995」「洛谷11月月赛」 跳跳!(贪心

    题目描述 你是一只小跳蛙,你特别擅长在各种地方跳来跳去. 这一天,你和朋友小 F 一起出去玩耍的时候,遇到了一堆高矮不同的石头,其中第 ii 块的石头高度为 h_ihi​,地面的高度是 h_0 = 0 ...

随机推荐

  1. struts 跳转的四种常用类型

    1 dispatcher 默认的跳转类型 地址栏不变 2.redirect 跳转后地址会变化 3 chain 跳转到一个动作类 地址栏不会变 4 redirectAction 跳转到一个动作类 地址栏 ...

  2. Android CollapsingToolbarLayout

    第一次看到这种用户体验是在Google Play Store App的应用详情的Activity中. 大的Banner图,能第一时间吸引用户的眼球,用不一样的Banner大图更具个性化的展示内容.图总 ...

  3. BZOJ3083 遥远的国度(树链剖分+线段树)

    考虑暴力树剖.那么修改路径和查询子树最小值非常简单. 对于换根当然不能真的给他转一下,我们只记录当前根是哪个.对于查询,如果查询点不在当前根到原根的路径上,显然换根是对答案没有影响的:如果是当前根,答 ...

  4. MT【139】公比为有理数

    已知正整数\(a_1,a_2,\cdots ,a_{2016}\)成等比数列,公比\(q\in (1,2)\),则\(a_{2016}\) 取最小值时,\(q=\)______ 解答: 显然\(q\) ...

  5. 【刷题】洛谷 P1402 酒店之王

    题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只有固定的q道不同的菜. ...

  6. Timus 1005 解题报告

    题目链接 http://acm.timus.ru/problem.aspx?space=1&num=1005 题目大意 给你一堆石头,现在需要你将这堆石头分成两堆,要求两堆石头的重量相差最小, ...

  7. POJ.1330 Nearest Common Ancestors (LCA 倍增)

    POJ.1330 Nearest Common Ancestors (LCA 倍增) 题意分析 给出一棵树,树上有n个点(n-1)条边,n-1个父子的边的关系a-b.接下来给出xy,求出xy的lca节 ...

  8. MyBatis.1入门篇

    一:简介 MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创建statem ...

  9. Android Studio aidl文件路径自定义问题

    1.aidl旧文件夹中添加的内容无法编译 sourceSets中主要是把把src/main/aidl文件也作为java.srcDirs, resources.srcDirs,这样当编译程序时,AIDL ...

  10. 观V8源码中的array.js,解析 Array.prototype.slice为什么能将类数组对象转为真正的数组?

    在官方的解释中,如[mdn] The slice() method returns a shallow copy of a portion of an array into a new array o ...