##2017-2018 ACM-ICPC, NEERC, Northern Subregional Contest
###Problem A. Auxiliary Project 题目描述:用摆成一个$8$字的七盏LED
灯来显示数字$0$~$9$,现要允许亮$n$盏灯,问形成的数字的和最大是多少。
solution 完全背包。
时间复杂度:$O(10n)$
###Problem B. Boolean Satisfiability 题目描述:给出一个只有$OR, NOT$运算符的式子,每个变量都是布尔变量,问有多少种赋值方案使得式子最终是$true$.
solution 求补集,因为运算符只有$OR, NOT$,所以如果一个变量既有本身又有$NOT$,则式子一定是$true$,否则只存在一种方案使得式子为$false$。
时间复杂度:$O(字符串长度)$
###Problem C. Consonant Fencity 题目描述:定义一个字符串的值:若相邻的字符都是辅音字母(不算'y, w'),而且大小写不一样,则字符串的值加一。给出一个由小写字符组成的字符串,确定哪些种类的字符变成大写,使得最后字符串的值最大,输出对应的字符串。
solution 搜索每种字母是大写还是小写。然后算出字符串的值,因为相邻字符都是辅音字母只有$19^2$种情况,所以可以预处理出每种情况在字符串出现多少,这样就可以在$19^2$内算出字符串的值。
时间复杂度:$O(2^{19} \times 19^2)$
###Problem D. Dividing Marbles 题目描述:给出四个数字$d_1, d_2, d_3, d_4$,有一堆个数为$2^{d_1}+2^{d_2}+2^{d_3}+2^{d_4}$的石子,进行以下操作:1、选择一堆大于$2$的石堆,将其分成两堆,每堆个数至少为$1$。2、如果有若干堆石子的个数相同,则只留下一堆。 最后只剩下一堆一个石子。问最少需要多少步$1$操作,并输出每一步$1$操作。
solution 还不会。。。
###Problem E. Equal Numbers 题目描述:给出一个序列$a_i$,每次选其中一个数乘以一个正整数,问进行$k$步操作后最少剩下多少种数字,输出$0 \leq k \leq n$,所有的$k$的答案。注意这$k$步不一定是连续的。
solution 有两种较优的操作方案:
- 先将有倍数的数变成它们的最大倍数,而且按照出现次数比较少的先变
- 将所有数都变成$lcm$,而且按照出现次数比较少的先变
每一步取两种操作的最小值
时间复杂度:$O(nlogn)$
###Problem F. Fygon 2.0 题目描述:给出一个只有for
语句的程序(只有最内层的for
有一句表达式),设那句表达式执行了$f(n)$次,令$\lim_{n \to \infty} \frac{f(n)}{Cn^k}=1$,求$C, k$。
solution 听完大神讲解后还没理清思路。。。
###Problem G. Grand Test 题目描述:给出一个图,在图中找出两个点,满足这两个点之间至少有三条没有点相交的路径。输出这两个点以及对应的三条路径。
solution 构建$dfs$树,树上除了树边就是返祖边。如果存在一个节点$cur$,它的两个儿子的子树中各存在一个节点有一条返祖边,且返祖边连着的点是$cur$的祖先,则祖先较低的和$cur$就是那两个点。下图为三条路径:
其中那两个点为$cur, D$为答案的两个点。第一条路径为$cur \to D$,第二条为$cur \to B \to D$,第三条为$cur \to C \to E \to D$。
时间复杂度:$O(n)$
###Problem H. Hidden Supervisors 题目描述:有一棵树,给出这棵树一些点的父亲,重构出一棵满足条件的树,使得能选出的点对数最多,那些点对满足父亲儿子关系且每个点只能存在于一个点对中,输出这棵树。
solution 给出的条件是一个森林,先处理每棵树的匹配问题(贪心就好),然后记住那些没有匹配的点以及没有父亲又没有匹配的点,然后贪心地匹配这两类点,剩下的点直接连向$1$即可。
时间复杂度:$O(n)$
###Problem I. Intelligence in Perpendicularia 题目描述:给出一个多边形,这个多边形的边平行于$x, y$轴。问从上下左右向多边形看,有多少长度的边看不到。
solution 多边形周长$-$外围矩形周长
时间复杂度:$O(n)$
###Problem J. Joker
###Problem K. Kotlin Island 题目描述:有一个全是.
的$h \times w$网格图,将某些行、某些列变成#
,使得.
连通块恰好有$n$个。输出最后的网格图。
solution 隔一行,隔一列变#
,而这样连通块的数量最多而且是一个矩形,所以可以把$n$分解成两个数相乘,然后尝试将矩形填进去即可。
时间复杂度:$O(\sqrt {n})$
###Problem L. Little Difference 题目描述:给出一个整数$n$,将其分成若干个数相乘,满足这些数的两两的差的绝对值不超过$1$,输出所有方案,或是$-1$表示无限种方案。
solution 显然,当$n=1$或是$2$的幂时,有无限种方案。 否则最多有$logn$种方案,因为当$n$分解成$m$个数相乘时,最多只对应一种方案,而且这$m$个数为$log_m n$或$(log_m n)+1$。所以可以特殊处理一下$m=2$的情况,然后设$x=log_3 n$,$x$是随着$m$的递增而不断递减的。
时间复杂度:$O(10^6)$
来源:oschina
链接:https://my.oschina.net/u/4384545/blog/4251080