tg 75 solution

T1

就是有这样一个事情,一个n有解当且仅当2n
证明考虑sum=i=12ni=2(2n+1)n2=n(2n+1)
2|sum的时候,
最优情况下是对于前n个数和恰好是sum2
这个时候,由于你往后移动了一个数,
相当于删掉一个数但是加回来一个不同的数,
所以和至少会减1/加1,同时另外一半会随之加1/减1
这样极差最少是2,因此这个时候无解,
否则,每个和变化1的时候,另外的部分会变成原和,所以极差是1

发现sum的表达式中2n+1这一项恒为奇数,
因此sum的奇偶性取决于n,所以一个n有解当且仅当2n

考虑构造,
面向样例编程于是会发现构造形如
2,3,...,2n,1,4,5,...
于是构造方式就显然了

并不好文字叙述的构造方式
a[n] = 2 * n, a[n + 1] = 1;
    int l = 1, now = 2, r = n + 2;
    for (int i = 1; i <= n / 2; i++) {
        a[l] = now;
        a[l + 1] = now + 1;
        a[r] = now + 2;
        a[r + 1] = now + 3;
        l += 2, r += 2;
        now += 4;
    }

上述构造方式满足删掉最前面的数,加入最后面的数的时候
n个数和的变换是+1 1交替出现
然后初值恰好为sum2(说不好上取整还是下取整的)
然后它们就恰满足极差等于1

T2

注意到β1集合的本质是大小为n的独立集
然后β2集合的本质是大小为n的匹配
注意到这两个点的点数和恰为3n
所以一个不存在,另一个必存在,
(所以另外有一个东西就是ImpossibleImpossible的)
证明考虑接下来的构造方式

对于每条边,尝试将其加入匹配
如果成功加入n条边,那么直接输出这n条边编号就行了
否则,因为匹配用掉的点数不足2n,不在匹配中的点至少为n
然后,不在匹配中的点,其所有连边必然和在匹配中的点连边
否则就可以将其加入匹配
事实上,在匹配中的点集和不在匹配中的点集交集为空
所以,我们选出n个不在匹配中的点,它们两两不连边,
也就是一个独立集了

实现考虑用一个vis数组记录每个点有没有在匹配当中
如果两个点都没在匹配当中,两个点vis都设成1,然后把这条边放进答案,否则啥都不管
如果答案集合边数够了n,把编辑里的边全部输出
到最后边加完了答案集合都没有到n,清空答案集合再随便找nvis0的输出就完事了

T3

参考排序那道题,二分中位数
然后0/1覆盖,对于大于等于mid的值为1,否则就是0
然后有如果两个相邻的0/1直接返回。
否则返回第一个元素在0/1意义下的值

T4

黑的,没改

posted @   2K22  阅读(19)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示