CF1788
CF1788
A. One and Two
Statement
给你一个数列 $ a_1, a_2, \ldots, a_n $ . 数列中的每一个数的值要么是 $ 1 $ 要么是 $ 2 $ .
找到一个最小的正整数 $ k $,使之满足:
- $ 1 \leq k \leq n-1 $ , and
 - $ a_1 \cdot a_2 \cdot \ldots \cdot a_k = a_{k+1} \cdot a_{k+2} \cdot \ldots \cdot a_n $ .
 
Solution
无解当且仅当序列中 2 的个数为奇数时。
有解找到 \(\frac{n}{2}\) 处即可。
B. Sum of Two Numbers
Statement
给定一个 \(n\),选取任意满足条件的两个非负整数 \(x,y\) ,使得 \(x,y\) 满足如下条件:
- \(x+y=n\)
 - \(x,y\) 的各位数字之和相差不超过 \(1\)
 
多测,共有 \(T\) 组数据。
Solution
随机化。随机两个数然后判断是否满足条件。随机几次基本就正确了。概率还是挺高的。
C. Matching Numbers
Statement
给定 \(m\),如果将 \(1,2\dots 2m\) 两两配对,显然会形成 \(m\) 对数。定义一对数的价值是两个数之和,希望构造一种方案使得这 \(m\) 对数的价值形成一个长度为 \(m\),并且公差为 \(1\) 的等差数列。
Solution
考虑偶数一定不会有什么前途,而且稍微想一下也会发现不会有什么前途。
考虑奇数的情况,我们把数 $ [1,n]$ 分为两部分:
- \(1,3,...,n\)
 - \(2,4,...,n-1\)
 
此时我们考虑通过调整 \(b_i\) 使得公差调整为 \(1\),则 \(b_i\) 每次 \(-1\)。
那么考虑两组怎么凑出来 \(b_i\) 了,显然是 \(2\times n\) 和 \(3\times \frac{n+1}{2}-2\)。
然后递减就行了。
E. Sum Over Zero
Statement
给你一个长度为 \(n\) 的序列 \(a_1,a_2 ... a_{n-1},a_n\),现在请你找到这个序列的若干个不相交的合法子段。
对于你选择的一个子段 \([x,y]\),其为一个合法子段当且仅当 \(\sum^{i\leq y}_{i=x} a_i \geq 0\),即子段的区间和非负。对于一个合法的子段 \(S=[x,y]\),我们记 \(f(S)=(y-x+1)\),且当子段 \(S\) 为空时, \(f(S)=0\)。
对于你选择的这若干个不相交合法子段,请最大化\(\sum_S f(S)\)并输出这个最大值
Solution
考虑朴素的 dp 。
设 \(dp_i\) 表示前 \(i\) 项最少不选多少。
\(dp_i=dp_{i-1}+1\),可以不选。
\(dp_i=0 (sum_i\ge0 )\),前缀均可选。
\(dp_i=\min\limits_{sum_i-sum_j\ge0}dp_j\),一段连续的大于等于 \(0\) 的区间。
这样的东西直接离散化前缀和然后在线段树上维护就行了,具体的可以参考代码。

                
            
        
浙公网安备 33010602011771号