周记1
1.17(841div2)
E.Graph Cost
n个点,想要添加m条边(不允许重边和自环)。每条边的权值为gcd(u,v);
每次操作添加k条边,k条边的权值都得是k+1,花费k+1。
求最小花费。
先求gcd(u,v)=x的点对数量,为phi[1]+phi[2]+...+phi[n/x];
x越小则满足的点对越多,故可用贪心每次操作尽可能多选边,使操作数最少。
ans=m+操作数。
求phi[]的前缀和时爆了int,时间太赶了没注意到。可以考虑#define int long long
F.待补
1.18(754div2)
A.A.M.Deciation
给三个数a1,a2,a3,使|a1+a3-2*a2|最小
每次操作选i,j使ai+1,aj-1。
发现每次操作+-3于是答案只可能是0或1(2=-1 mod 3) |-1|=1(想错了2的情况W了两发)
C.Dominant Character
给定一个字符串只包含abc三种字母
要求最小的子串满足长度>=2,'a'出现次数大于'b'也大于'c'
输出该子串的长度。
发现该子串首尾都是a 刚开始以为只有aa,aba,aca,abca,acba.
W了一发,想到了abbacca accabba的情况
D.Treelabeling
E和S在树上玩游戏,E先手选一个点,然后轮流移动,谁动不了就算输。
只能移动到相邻的且未访问过的点上,两点的编号u,v满足u^v<=min(u,v)
给定一棵树的形态,要你给点编号使得E赢的起点最多。
想到了能不能使所有点都是E赢。一个很简单的方案是使各个点之间不能移动
原条件 u^v<=min(u,v) = 要求最高位相同。
我们只要使相邻的点编号最高位不相同即可。
根据最高位的不同对编号进行分类
各有2^0,2^1,2^2,...,2^log2(n),n-2^log2(n);
2^0,2^1,2^2,...,2^log2(n)这一部分的和>=n/2;
只需对树进行黑白染色对于数量较少的一部分,
定能用2^0,2^1,2^2,...,2^log2(n)凑出来,没使用的部分归于另一个颜色。
T了一发,多组数据每次用memset清空数组。
可以for (int i=1;i<=n;i++) head[i]=0,vis[i]=0;
E,F待补
1.19(743div2)
D.Xor of 3
长度为n的01序列,要使其变为全0。
每次操作选一个i,使ai,ai+1,ai+2=ai^ai+1^ai+2
要求操作数<=n或输出不可能。
We can prove that if there exists a sequence of operations of any length that
changes all elements of a to 0s,then there is also such a sequence of length not greater than n.
显然要有偶数个1.
经典套路考虑一下对1,3,5,...,2k+1操作则a[1]=a[2],a[3]=a[4]...
!!!若n为奇数则a[n-2]=a[n-1]=a[n]=0
此时再对n-4,n-6,...1操作即可得到目标结果。
若n为偶数呢?
考虑将序列分成两段长度为奇数且1的个数为偶数
分别进行上述操作。
样例中1001找不到合适的分割点无解。
但0101显然有解也找不到分割点。
注意到a[1]=0,即可忽略a[1]进行讨论。同理a[n]=0也是。
E,F待补...
1.20(Edu116div2)
B.Update Files
1e18的数据范围 log2(ll x)函数精度不够要用long double
该函数慎用..W了两发
D,F待补...
1.28(Hello 2023)
E. Anya's Simultaneous Exhibition
n个人n-1场比赛一场淘汰1个看谁可能是winner.
交互题你可询问不超过2n次,每次是一个车轮战
你指定一个人和若干人比,它告诉你指定的人赢了几场
在n个人的竞赛图中,
一个人可能成为winner就是从他出发要能到达其他所有的点
出边最大的点x一定是可能成为winner的
假设x到不了y,则x能直接到达的点也都到不了y
那么y的出度就大于x了。与前提矛盾。
对于一张竞赛图,缩点后拓扑序最小的连通块上的点都是可能的winner。
这些点的出度都显然大于其他连通块的点的出度....
n次询问,每次都是1对n-1,得知每个人的出度。
进行排序。
首次满足sum==1ll*i*(i-1)/2+1ll*i*(n-i)时,说明这i个人属于第一个连通块。
for (int i=1;i<=n;i++)
{
sum+=a[i].d;
if (sum==1ll*i*(i-1)/2+1ll*i*(n-i))
{
for (int j=1;j<=i;j++) f[a[j].id]=1;
break;
}
}
F,G,H待补...

浙公网安备 33010602011771号