A、俄罗斯方块
签到,从下往上暴力判断这个方块的所有位置能不能放
B、真的是签到题
签到,直接输出
C、港口
我们将它分成若干个上升的区间或者分成若干个下降的区间,显然,每个区间,都需要max-min,然后每个区间之间,可以看成若干个[min, max],可以证明存在一条上升的直线或者下降的直线,在不需要额外花费的情况下使得所有数字相等,也就是说,可以让他们相邻之间[minn1,maxn1] [minn2,maxn2] 满足 maxn1>minn2 || minnn1 < maxn2,也就是区间重叠,所有我们只需要计算分成若干个上升的区间或者分成若干个下降的区间的花费,取最大即可。
E、简单的线性代数
由于线性代数学的并不好,(但我会猜案例)
显然就是相反数并且对角线+1
F、集合操作
居然可以set乱搞?我吐了,赛时我为啥要上线段树啊
考虑上一颗权值线段树,操作三可以看成查询大于等于x的在集合s种的最小正整数,然后操作一和操作二互换,一开始集合是全集
然后我们需要将 1e6 个数字拿出来离散化?NO,考虑到操作三,我们需要将这 1e6 个数字和这 1e6 个数字+1,总共 2e6 个数字那来离散化,然后直接在线段树上 dfs 即可,时间 1.2S,set乱搞时间 4.2S
G、数位操作1
考虑每一位一定是1-9的数字,并且由于答案尽量小,1最好不出现,并且数字个数尽量少,所以我们从大到小分解 n,如果分解之后包含>9的因数,显然 -1,如果分解后只有一个数字,并且由于题目要求,ans > 9,我们在这个数字前面再加一个 1 即可,如果分解后多个数字,直接从大到小输出 9 - 2 即可
K、签个到
任意两个数字的差值是固定的,为了使得差值尽量大。我们选择这两个数字的最大下标进行加减,所以只需要维护一个前缀最大,最小值即可。
代码: