Helvetic Coding Contest 2019 差A3 C3 D2 X1 X2

Helvetic Coding Contest 2019

A2

题意:给一个长度为 n 的01序列 y。认为 k 合法当且仅当存在一个长度为 n 的01序列 x,使得 x 异或 x 循环右移 k 位的 01 串得到 y 。问合法的 k 的个数。 \(n \le 2*10^5\)

key:找规律

考虑如何check一个 k 是否合法。那么对于所有的 i 和 i-k 在模 n 的意义下,如果 y 的第 i 位为 0 则二者必须不同,否则必须相同。这样可以用并查集判断是否合法。实际上是把相同的缩起来后看看是否存在奇环。

仔细观察可以发现实际上只有 i+k*m 这个集合中的点有边,并且形成了一个环,而环的大小就是集合中 1 的个数。

实际上,对于一个 k ,只需要把 1~n 按照模 gcd(k,n) 分成等价类,判断每个等价类中 1 的个数即可。所以只需要对 n 的每个约数做预处理。复杂度 \(O(n\sqrt n)\)

B2

题意:给一个带权二分图,边权均为 k 。可以加若干个右部点连向所有左部点,边权为 h。求二分图最小权匹配。 \(n \le 1000\)

key:二分图

实际上只有两种情况:全部匹配,花费为 n*h。或者不加新点,花费为匹配数*k。证明比较显然。写这个题主要是当时傻逼了……

E1

题意:给一个带权无向图。定义 \(E_{\max}(c_i)\) 是把第 i 条边的边权最大修改成多大,使得它可能出现在最小生成树中。求 \(E_{\max}(c_1)\)。 \(n \le 10^5\)

key:最小生成树

有一个易证的结论:若某边可以出现在最小生成树中,那么把严格小于该边边权的所有边加入图中,该边的两个端点仍然处于两个联通块中。

E2

题意:对于所有非树边,求上题中的 \(E_{\max}(c_i)\)。保证最小生成树唯一。 \(n \le 10^5\)

key:最小生成树

因为最小生成树唯一,所以还是有一个易证的结论:一条非树边的答案为对应最小生成树的链上最大值。

E3

题意:对于所有边,求上题中的 \(E_{\max}(c_i)\)。 \(n \le 10^5\)

key:最小生成树

首先先看非树边,考虑E2的做法以及它为什么在不唯一时仍然成立:对于做出来的一棵最小生成树,非树边的答案显然是大于等于链上最大值的。如果存在一个最小生成树的形态使得在这条链上的最大值更大,那么显然可以把这条边换掉来得到一个更小权的生成树,矛盾。实际上这表明对于最小生成树的任意形态,两点之间的最大值是不变的(NOIP2013 货车运输)

对于树边其实比较简单:如果在生成树上把这条边去掉,会分成两个联通块,考虑所有连接这两个联通块的边,除去它本身最大的那条边即为答案。换句话说,所有覆盖它的非树边中最小的即为答案。这可以用并查集简单的维护。

原文地址:https://www.cnblogs.com/dqsssss/p/11179272.html

时间: 2024-10-08 09:18:02

Helvetic Coding Contest 2019 差A3 C3 D2 X1 X2的相关文章

Helvetic Coding Contest 2019

题目链接:戳我 小注:其中部分(大括号不换行的)代码是BLUESKY007神仙写的. 小注2:如果可以的话,B2,C2,E3明天更. CF1184 A1 直接枚举,以根号的时间复杂度判断即可.注意x,y都是正整数. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define MAXN 100010 #define

2020-3-14 acm训练联盟周赛Preliminaries for Benelux Algorithm Programming Contest 2019 解题报告+补题报告

2020-3-15比赛解题报告+2020-3-8—2020-3-15的补题报告 2020-3-15比赛题解 训练联盟周赛Preliminaries for Benelux Algorithm Programming Contest 2019  A建筑(模拟) 耗时:3ms 244KB 建筑 你哥哥在最近的建筑问题突破大会上获得了一个奖项 并获得了千载难逢的重新设计城市中心的机会 他最喜欢的城市奈梅根.由于城市布局中最引人注目的部分是天际线, 你的兄弟已经开始为他想要北方和东方的天际线画一些想法

2016ACM/ICPC亚洲区青岛站 Coding Contest 费用流

目录 2016ACM/ICPC亚洲区青岛站 Coding Contest 费用流 题目描述 题意(博主的鬼畜翻译): 分析: 代码 2016ACM/ICPC亚洲区青岛站 Coding Contest 费用流 题目描述 题目描述 A coding contest will be held in this university, in a huge playground. The whole playground would be divided into N blocks, and there w

[AtCoder] NIKKEI Programming Contest 2019 (暂缺F)

[AtCoder] NIKKEI Programming Contest 2019 ??本来看见这一场的排名的画风比较正常就来补一下题,但是完全没有发现后两题的AC人数远少于我补的上一份AtCoder. A - Subscribers ??首先始终 \(max = \min(A, B)\) ,\(min\) 的话如果 \(A + B \leq N\) ,那么就是 \(0\) ,否则就是 \(A + B - N\) . int n, a, b; int main() { read(n), read

【AtCoder】Tenka1 Programmer Contest 2019

Tenka1 Programmer Contest 2019 C - Stones 题面大意:有一个01序列,改变一个位置上的值花费1,问变成没有0在1右边的序列花费最少多少 直接枚举前i个都变成0即可 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define space

[ICPC训练联盟周赛1] CTU Open Contest 2019

昨天ICPC训练联盟进行了第一场比赛,题目是CTU Open Contest 2019,烟台大学给出了解析. 题目和题解在此(提取码zre3) 我和索队还有yz组队,喊着队友nb就AK了,抱大腿真爽. A题是简单的组合数学,显然有公式 \(1\times C_n^1+2\times C_n^2+ \dots + n \times C_n^n=n \times 2^{n-1}\) 但忘了考虑\(n=0\)的情况,我wa了一发. B题题目我不太读得懂,yz A的. C题是算圆和矩形相交的面积,我抄了

「CF1115」Microsoft Q# Coding Contest - Winter 2019 - Warmup

题目链接 资料 another 资料 赛后题解 被神仙 \(LMOliver\) 骗叫来一起做这套题被吊起来打. 毕竟量子计算什么的,只有神仙才会.我太蒻了. G1. AND oracle Intention 给你 \(N\) 个量子位,若全为 \(\left|1\right>\) (即逻辑与结果为 \(|1\rangle\)) 则翻转 \(y\) ,否则什么也不做. Solution 开始被这道题卡了好久. 只知道 X,H,CNOT,CCNOT 四个操作,硬是用这些操作搞出来了. 具体方法就是

NIKKEI Programming Contest 2019 翻车记

A:签到. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int gcd(int n,int m){return m==0?n:gcd(m,n%m);} int read() { int x=0,f=1;char c=getc

AtCoder NIKKEI Programming Contest 2019 C. Different Strokes (贪心)

题目链接:https://nikkei2019-qual.contest.atcoder.jp/tasks/nikkei2019_qual_C 题意:给出 n 种食物,Takahashi 吃下获得 ai 快乐值,Aoki 吃下获得 bi 快乐值,两人轮流吃,他们的目标是最大化自己获得的快乐值减去她人获得的快乐值吗,问最后该值是多少. 题解:易知 Takahashi 要最大化答案而 Aoki 要最小化答案,考虑全部食物由 Aoki 吃下,则ans = -(b1 + b2 + .... + bn),