首页 > 其他分享 >11.28 模拟赛

11.28 模拟赛

时间:2024-11-28 20:24:02浏览次数:6  
标签:fifa 连通 11.28 return int 最小 Delta 模拟

总结

T1 读完题就会了。感觉没什么坑直接写。10min 过大样例。没啥好拍的就不拍了。

T2。感觉不难啊,这种模拟 Kruskal 的题都做一堆了。想。

谔谔正解会不了一点。写个乱搞,看看能不能过大样例。

一开始是没过的,因为少写了一种情况。很久之后意识到改过来发现大样例过了!

然后没对拍。当时真不知道在想啥。

T3 什么玩意,样例解释怎么蹦出个 \(4\)???对称点是啥?????花了一点时间(<5min)发现题意看不懂一点,而且部分分挺少,不管了看 T4。

然而事实上 T3 的题面确实很脑瘫。赛后听 lhl 才终于理解题意。而且全机房就 lhl 读懂了题。。。。。而且 A 了。。。。。。。Orz Orz Orz

T4。不是有结论”与+或=和“吗。那么问题不久变成了从 \([l, r]\) 内选若干数,使得它们的与和为 \(sum / 2\) 吗!

想一想做法。\(nq\) 暴力平凡。\(a_i \le 15\) 平凡。随机……或许也是平凡的。有 \(50\)!!!!!

赶紧写。

然后样例没过。然后发现自己跟个小丑似的”与+或=和“跟着题一点关系没有。

还是只会 \(8\) 分。火大。

T2 做法肯定不是正解,但说不定能骗一堆分。先把保底 \(50\) 写了。

然后我还是小丑,\(u_i \in \{0,1\}\) 写了但是忘拼提交的代码上了。

\(100+40+0+0\)。T4 咋挂了???哦哦哦哦哦哦出题人题面没写集合不能为空。我***

题解

A. 送信卒

注意到 \(k\) 越小最短路一定不会边长。于是二分答案。check 用 Dijkstra。

B. 星际联邦

解法 1(题解做法)

考虑蓝莓(捷克语:Borůvka)算法。


它的思想很类似 Kruskal。Kruskal 一次操作会选择两个连通块合并,而蓝莓算法则是多个。

流程是这样的:

  • 最开始图中有 \(n\) 个连通块。即没有边。
  • 为每个点 \(u\) 找一条边 \((u,v,w)\),其中 \(v\) 和 \(u\) 不在同一个连通块内,且 \(w\) 最小。将这条边称为这个的 最小边
  • 将所有最小边的端点的两个连通块合并。答案加上这些最小边的边权。
  • 若此时剩余连通块数量 \(>1\),回到第二步。否则结束。

【模板】最小生成树 用蓝莓算法实现如下:

int n, m, p[N];
int best[N];		// 最小边
bool st[N];

struct Edge {
	int a, b, c;
}e[N];

int fifa(int x) {
	return x == p[x] ? x : p[x] = fifa(p[x]);
}

void merge(int a, int b) {
	p[fifa(a)] = fifa(b);
}

bool cmp(int a, int b) {
	if (!b) return true;
	if (e[a].c != e[b].c) return e[a].c < e[b].c;
	return a < b;	// 如果边权相等,视作编号小的边更小。
}

void solve() {
	cin >> n >> m;
	
	for (int i = 1; i <= m; ++ i ) {
		cin >> e[i].a >> e[i].b >> e[i].c;
	}
	
	for (int i = 1; i <= n; ++ i ) {
		p[i] = i;
	}
	
	int cnt = 0, res = 0;
	bool flg = true;
	while (flg) {
		flg = false;
		
		memset(best, 0, sizeof best);	
		for (int i = 1; i <= m; ++ i )
			if (!st[i]) {
				int a = fifa(e[i].a), b = fifa(e[i].b);
				if (a == b) continue;
				if (cmp(i, best[a])) best[a] = i;
				if (cmp(i, best[b])) best[b] = i;
			}
		
		for (int i = 1; i <= n; ++ i )
			if (best[i] && !st[best[i]]) {
				flg = true;
				cnt ++ ;
				res += e[best[i]].c;
				st[best[i]] = true;
				merge(e[best[i]].a, e[best[i]].b);
			}
	}
	
	if (cnt == n - 1) cout << res;
	else cout << "orz";
}

复杂度为什么正确?因为一轮操作后图中连通块的数量至少减半。所以复杂度是 \(\mathcal O((n+m)\log n)\)。


对于本题,发现一个点 \(i\) 的最小边一定是前缀最大值或后缀最小值。直接维护即可。

但是最小边的定义里写明,两个端点不能在同一个连通块内。于是还需要维护前缀次小值和后缀次大值。这里的 表示不和最值连通块相同的最值。

解法 2(乱搞)

考虑对于每个 \(j\),找到所有 \(i < j\) 的 \(a_i\) 的前 \(M\) 大,和所有 \(i > j\) 的 \(a_i\) 的前 \(M\) 小。这样边的数量是 \(\mathcal O(nM)\) 的。

实测 \(M=18\) 可过。

C. 对称旅行者

考虑期望。

显然一次跳跃后,第 \(i\) 个人会从 \(x_i\) 跳到 \(\frac 12 (2x_i-x_{i-1}+2x_i-x_{i+1}) = x_{i-1}+x_{i+1}-x_i\)。

然后 P7962 [NOIP2021] 方差。求 \(x\) 的差分数组 \(\Delta x_i=x_i-x_{i-1}\)。

那么第 \(i\) 个人跳一步,相当于交换 \(\Delta x_i,\Delta x_{i+1}\)。

为啥?

原本 \(\Delta x_i=x_i-x_{i-1}\)。跳跃后 \(\Delta x'_i = x_{i-1}+x_{i+1}-x_i-x_{i-1}=x_{i+1}-x_i=\Delta x_{i+1}\)。

原本 \(\Delta x_{i+1}=x_{i+1}-x_i\)。跳跃后 \(\Delta x'_{i+1}=x_{i+1}-(x_{i-1}+x_{i+1}-x_i)=x_{i-1}-x_i = \Delta x_i\)。

也就是说一轮操作 \(a_1 \sim a_m\) 相当于依次执行 \(\operatorname{swap}(\Delta x_{a_1},\Delta x_{a_1+1})\dots \operatorname{swap}(\Delta x_{a_m},\Delta x_{a_m+1})\)。先暴力做一遍,求出 \(p_i\) 表示 \(x'_i = x_{p_i}\)。

然后快速幂维护 \(p^k\)。

最后前缀和。

标签:fifa,连通,11.28,return,int,最小,Delta,模拟
From: https://www.cnblogs.com/2huk/p/18575087

相关文章

  • 多校A层冲刺NOIP2024模拟赛27终结篇
    不知道是不是我打的最后一场模拟赛了,记录一下吧,总体来说还不错,虽然\(T1\)方案数求错爆零了,但\(T3\)场切了,暴力打满的话有265,希望\(NOIP\)时也可以不让自己遗憾吧。A【模板】分治FFT考虑每加进来一个数的贡献\(x_1*x_2+(x_1+x_2)*x_3+...=x_1*x_2+x_1*x_3+x_2*x_3+...\)......
  • NOIP 模拟赛 #20 - D 题解
    D一个\(n\timesm\)的网格图,一开始所有格子颜色都是\(0\)。有\(k\)次染色操作,每次把第\(l\simr\)行或第\(l\simr\)列中的格子全都染成颜色\(c\)。在所有染色操作完成后,设$c_{i,j}为格子\((i,j)\)的颜色,求\(\sum\limits_{i=1}^n\sum\limits_{j=1}^m(......
  • 多校A层冲刺NOIP2024模拟赛27终结篇
    多校A层冲刺NOIP2024模拟赛27终结篇前言就一定要让我挂分吗???T1证出结论后却交了一发错解,成功挂100。T2是不是可以直接贪,直接写。T2写完了,tm怎么也没有大样例?T3是不是可以线段树。T3是不是不可以线段树。T4是不是可以K-DTree,但我不会写K-DTree。T4是不是可以......
  • NOIP2024 前集训:多校A层冲刺NOIP2024模拟赛 27 终结篇
    前言点击查看代码《蜂鸟》传说中人类在远早住于黑暗的地下之遥派出了娇小的蜂鸟找到通往光明的隧道飞过了一座一座岛好想有一个地方落脚把一个一个梦制造会不会有人能够听到寻找太阳的梦自不量力说自己也变成太阳的念头有时候寂寞几乎扛不动咽在喉咙......
  • Burp抓模拟器App HttpHttps数据包
    Burp抓模拟器AppHttp/Https数据包Next抓模拟器中AppHttps数据包,本文模拟器环境为最新版本雷电模拟器9。首先仍需在模拟器内安装证书,Burp导出证书,导出步骤同上。雷电模拟器安装证书可能需要设置PIN码,依据提示设置安装即可。模拟器设置手动代理,将流量转发至自己PC......
  • 多校A层冲刺NOIP2024模拟赛27终结篇
    多校A层冲刺NOIP2024模拟赛27终结篇\(T1\)A.【模板】分治FFT\(0pts\)将式子展开后是一个形如\(f_{n}\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{i-1}a_{i,j}\)的形式。考虑\(f_{n}\)如何转移。当我们选出一对\((i,j)\)进行合并进入\(n'=n-1\)的子问题,故\(a_{i}......
  • 2024.11.28
    DPP1048[NOIP2005普及组]采药-洛谷|计算机科学教育新生态#include<iostream>usingnamespacestd;intt[101],w[101];intdp[1001];intmain(){intT,M;cin>>T>>M;for(inti=1;i<=M;i++){cin>>t[i]>>w[i];}......
  • uni-app运行 安卓模拟器 MuMu模拟器
    最近公司开发移动端系统,使用真机时每次调试的时候换来换去的麻烦,所以使用模拟器来调试方便。记录一下安装和连接的过程一、安装MuMu模拟器百度搜索MuMu模拟器并打开官网或者点这里MuMu模拟器官网点击下载模拟器安装模拟器,如果系统已经安装了的话重新安装会出现覆盖安装按......
  • 『模拟赛』多校A层冲刺NOIP2024模拟赛27终结篇
    Rankrp++A.【模板】分治FFT签。没取模挂50pts。列出式子发现无论何种合并方式,最终权值均为\(\sum_{i=1}^n\a_i\times(\sum_{j=i}^n\a_i)\),因此求方案数即可。发现每一步相当于从当前堆数中任选两个出来,容易得出方案数为\(\prod_{i=2}^{n}\binom{i}{2}\)。时间复杂度......
  • NOIP 模拟赛:2024-11-25
    T1:简单贪心。T2:有的\(n\)间屋子被\(n-1\)条双向路径连通,构成树结构。其中第\(i\)个屋子中住着一个种族\(c_i\)的狼人。树的一个连通子图中,若其中一个种族的狼人超过了其他种族的总和,它们可以在该连通子图中进行支配。具体而言,记\(a_i\)为种族为\(i\)的狼人在连通子图中的个数......