zoukankan      html  css  js  c++  java
  • 2017 NWERC

    2017 NWERC

    Problem A. Ascending Photo

    题目描述:给出一个序列,将其分成(m)份(不需要均等),使得将这(m)份重新排列后构成的是不下降序列,输出最小的(m-1)

    solution
    待解决。

    Problem B. Boss Battle

    题目描述:有环形的(n)根柱子,只有一根柱子后面有boss,每次向一根柱子投一个炸弹,炸弹波及范围为那根柱子和相邻的柱子,若boss在这三根柱子后面,则boss被炸死,若boss没有被炸死,则boss会选择原地不动或者走到相邻的柱子,问最坏情况下要用多少个炸弹。

    solution
    (n leq 3)时,答案是(1)
    (n>3)时,观察可得答案是(n-2)。因为在每次扔完炸弹后,第二次扔在那个炸弹的顺时针数两个的位置,这样boss不可能在的位置就会增加一个(不可能存在的位置为一个连续的区间,顺时针最前增加两个位置,最后减少一个位置),最后剩下三个不确定的位置时,把炸弹扔到中间的柱子即可。

    时间复杂度:(O(1))

    Problem C. Connect the Dots

    题目描述:有(4 imes 4)十六个点,每个点有一个编号,按编号顺序一笔画,问最少需要多少条折线。

    solution
    假设折线由角度(angle)穿过(i),则可以根据(angle)推出可以以什么角度穿过(i+1),而可行的角度是一个连续区间。由(4 imes 4)的任两个点组成的角度不是很多,按这些角度搜索一下就好了。
    这是大致的想法,具体还没实现出来。。。

    Problem D. Dunglish

    题目描述:给出一个荷兰文的句子((n)个单词)以及(m)个荷兰文单词的英文翻译,但一些翻译是正确的,一些是错误的。判断这个句子是不是只有一种翻译,若只有一种翻译,则输出那种翻译,并判断这个翻译是正确的还是错误的;若有多种翻译,则输出有多少种翻译是正确的,有多少是错误的。

    solution
    模拟

    时间复杂度:(O(nlogm))

    Problem E. English Restaurant

    题目描述:饭店里有(n)个桌子,每个桌子最多有(a_i)个人坐。饭店经营(t)个小时,每个小时会有(1)~(g)个人来饭店,然后他们会选择一张没有人坐的,并且坐得下的最小的桌子坐下,如果没有,他们就会离开。坐下的人会到饭店结束经营才离开,问最后剩下人数的期望值。

    solution
    (a_i)从小到大排序,大于(g)(a_i)令其变成(g)即可。然后补(t)(g)在最后,作为离开的人占位。
    先预处理出(g_{i, j})表示([i, j])的桌子都被占,其它桌子没有被占的期望,计算方式是用区间(dp)。选([i, j])中的一个(k),表示是([i, j])中最后占的桌子,计算期望值时要注意有一个组合数(C_{j-i}^{k-i}),表示前(i-j)张桌子的排列顺序种数。
    再利用(g_{i, j})算出(f_{i, j})表示前(i)张桌子占了(j)张期望的人数。枚举(k)表示(i-k+1)~(i)都占有,(i-k)不占,当(k=0)时表示(i)不占。注意这里也有一个组合数(C_{j}^{k}),表示前(j)张桌子的排列顺序。

    时间复杂度:(O(n^3))

    Problem F. Factor-Free Tree

    题目描述:给出一棵带点权的树的中序遍历,构造一棵树,使得每个节点与它的祖先都互质,输出这棵树,或无解。

    solution
    首先预处理出每个节点(i)的左边第一个与(i)不互质的位置(le[i]),以及右边第一个与(i)不互质的位置(ri[i])
    接着搜索区间([L, R]),表示现在在构造([L, R])这棵树,然后在([L, R])中找出一个与除它本身外所有数都互质的数,这个数作为树根,然后搜索左右子树。
    这里有一个技巧,就是两头向中间找那个数,这样如果那个数在两端,在很快就能找到那个数,如果在中间,则分出的两个子树比较平衡,这会节省不少时间。

    时间复杂度:(O(nlogn))

    Problem G. Glyph Recognition

    题目描述:给出(n)个点,然后分别用正三、四、五、六、七、八边形围住这些点,要求正多边形面积最小;又用正多边形摆在点的中间,使得正多边形内(不包括边界)没有点,要求正多边形面积最大。分别求出这些正多边形对应的最小最大面积,求出最小比最大的最大值以及所对应的正多边形类型。注意:正多边形的中心在原点,且正多边形的一个顶点在(x)轴。

    solution
    模拟。

    时间复杂度:(O(n^2))

    Problem H. High Score

    题目描述:有四个数(a, b, c, d),现将(d)分到(a, b, c)中,即(a'=a+x, b'=b+y, c'=c+z, x+y+z=d, x, y, z geq 0),使得(a'^2+b'^2+c'^2+7 cdot min){(a, b, c)}最大,输出最大值。

    solution
    (d)比较大时,肯定是全部分到最大的那个数比较好;当(d)比较小时就要枚举一些。所以定好一个界限,(d)大于这个界限时全部分到最大的那个数,否则枚举。

    时间复杂度:(O(7 imes 10^7))

    Problem I. Installing Apps

    题目描述:有一个硬盘,容量为(c),现有(n)个软件,每个软件下载到硬盘后大小为(d_i),安装后为(s_i),安装时(d_i)直接转换为(s_i),因此装第(i)个软件前硬盘中至少有(max){(d_i, s_i)}容量。确定安装顺序,使得安装的软件数最多。

    solution
    按照贪心思想,可以按照安装后释放空间的大小来排序,即(d_i-s_i)从大到小排序。然后背包(dp),因为这里要记录方案,所以要用二维数组来存储。

    时间复杂度:(O(nc))

    Problem J. Juggling Troupe

    题目描述:开始时(n)个人排成一列,每个人手上有至多两个球,每一轮手里有多于(1)个球的人扔一个球到左边,扔一个球到右边,如果那个人在最左边或最右边,则直接将球扔掉(即没有人接的球直接扔掉)。每一轮的球是同时扔的,问最后无法再进行时的状态(每一个人手上有多少个球)。

    solution
    找规律。发现如果只有一个(2)时,设(2)的位置为(i)(i)的左边第一个(0)的位置为(L)(i)右边第一个(0)的位置为(R),最终的状态为:位置(L, R)变为(1),位置(L+R-i)变为(0)([L, R])的其它位置变为(1)
    又发现每个(2)是独立的,即每个(2)可以不同时扔球,可以分开处理。所以最终的解法就是按照只有一个(2)的解法解决每个(2)即可。

    时间复杂度:(O(nlogn))

    Problem K. Knockout Tournament

    题目描述:有(n)个人进行淘汰赛,每个人有一个评分(r_i),当评分为(a)的人遇到评分为(b)的人时,(a)赢得比赛的概率为(frac{a}{a+b})。现在要将这(n)个人排好顺序,使得原来排在第一的人赢得比赛的概率最大,求出这个概率。注意:(n)可能不是(2)的幂,则第一轮排在最后的一些人直接到第二轮,使得第二轮的人数是(2)的幂。

    solution
    按照一般思维,肯定是要赢的那个人遇到的人越垃圾越好,评分高的人遇到的人越强越好。所以将评分从大到小排序,第一轮处理一下就好了(可以补(0)),(p[i][j])表示(j)在第(i)轮胜出的概率,设(j)在第(i)轮可能遇到的人为(k),则(p[i][j]+=p[i-1][j] imes p[i-1][k] imes frac{r_j}{r_j+r_k})(k)是一个区间,可以在(logn)时间内得出。

    时间复杂度:(O(nlogn))

  • 相关阅读:
    win7 64位系统,vs2010下配置OpenGL开发环境
    OpenCV stereo matching 代码 matlab实现视差显示
    Cocos2d-x 3.x游戏开发之旅
    芯片验证漫游指南
    名师讲坛:PHP开发实战权威指南
    Python带我起飞:入门、进阶、商业实战
    新编Excel会计与财务管理应用大全(2016实战精华版)
    CorelDRAW X7中文版完全自学宝典
    HTML5 canvas开发详解(第2版)
    中文版3ds Max 2014--VRay效果图制作实用教程
  • 原文地址:https://www.cnblogs.com/GerynOhenz/p/8398057.html
Copyright © 2011-2022 走看看