zoukankan      html  css  js  c++  java
  • 2017 ACM ICPC Asia Regional

    2017 ACM ICPC Asia Regional - Daejeon

    Problem A Broadcast Stations

    题目描述:给出一棵树,每一个点有一个辐射距离(p_i)(待确定),但(p_i==0)的点不能辐射自己,只能由别的点辐射覆盖。求(p_i)的和的最小值。

    Problem B Connect3

    题目描述:有一个(4 imes 4)的网格,两个人玩游戏,第一个人用黑棋,第二人用白棋。每次选择一列,将棋子扔下去,直到最下一个空的格子。现在给出第一个人下的位置,以及最后第二个人下的棋子最终的位置。已知最后一步是赢棋的一步,问最终有多少种棋盘状态。

    solution
    因为状态数很少,所以可以直接暴力搜索最终的状态。

    时间复杂度:(O(2^{16}*16))

    Problem C Game Map

    题目描述:给出一个(n)个点的图,设每个点的度为(d_i),选出一个最长的序列(c_i),满足(d_{c_i}<d_{c_{i+1}}),且(c_i)(c_{i+1})相邻,输出最长的长度。

    solution
    将点按度排序,每个点(i)向度比(d_i)大的邻居连一条有向边,然后DAG (dp)

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

    Problem D Happy Number

    题目描述:设函数(f(n))(f(n))等于(n)的每一位的数的平方的和,将得出的结果继续带进(f)继续算,直到等于(1),如果能等于(1),则称(n)是开心的数,否则是不开心的数。给出一个数(n),判断是否是开心的数。

    solution
    暴力模拟,记忆化(n leq 1000)的数是否开心。

    时间复杂度:(O(1000*10))

    Problem E How Many to Be Happy?

    题目描述:给出一个有(n)个点(m)条边的图,每条边有一个边权,问要使第(i)条边成为图的最小生成树的一条边最少要删掉多少条边,求出每条边的对应答案的和。

    solution
    枚举边(i),找出那些边权小于(i)的边权的边,这些边都是网络流里的边,然后以(i)的两个点为源点和汇点跑网络流求最小割。

    时间复杂度:(O(mn^2m))(远小于这个值)

    Problem F Philosopher’s Walk

    题目描述:按以下规则构建路线:其中(W_i)的左上角和右上角都是(W_{i-1}),左下角为(W_{i-1})顺时针转(90^{circ}),右下角为(W_{i-1})逆时针转(90^{circ})。从((1, 1))出发沿线编号。给出(x, y),求出(W_x)中编号为(y)的格子坐标。

    solution
    分治求解,缩减图的规模,递归回来之后进行坐标变换即可。

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

    Problem G Rectilinear Regions

    题目描述:给出两条阶梯型的线(L, U),求出那些(U)在上,(L)在下围成的多边形的面积的和。

    solution
    观察可得,多边形的左边为(U)的竖线与(L)的横线相交,右边为(U)的横线与(L)的竖线相交。枚举(U)的每一级,二分出(L)对应的位置,判断是否相交。将相交的地方映射到(x)轴,若相邻的相交类型是上述的类型,就用部分和算出围成的多边形的面积。

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

    Problem H Rock Paper Scissors

    题目描述:给出两个剪刀(S)石头(R)布(P)的序列,确定第一个序列的一个位置作为第二个序列的开始位置,算出第二个序列能多少局。求出第二个序列最多能赢多少局。

    solution
    先将第一个序列的每一位变成能赢这一位的字符。问题变成一个匹配问题。
    将这个序列分成三个序列,每个序列分别只有剪刀、石头、布。同样将第二个序列分成三个序列,每个序列分别只有剪刀、石头、布。

    例如:
    RSPPSSSRRPPR 先变成 PRSSRRRPPSSP
    RRRR
    将石头序列拿出来,假设第一个序列为(a_i),第二个序列为(b_i)。按照上述的例子:
    (a=010011100000)
    (b=1111)
    (f_i)表示以(i)开头的区间的匹配数目,则(f_i=sum_{j=0}^{j<|b|} a_{i+j}*b_j),若将(a_i)翻转,则(f_{n-i}=sum_{j=0}^{j<|b|} a_{n-(i+j)}*b_j),就是卷积。
    同理算出剪刀序列和布序列,求和,求最大值。

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

    Problem I Slot Machines

    题目描述:给出一个长度为(n)的序列(a_i),这个序列第(k+1)起到最后是若干个循环,周期为(p),最后一个循环可以不完整。求(k+p)最小值对应的(k, p)

    solution
    将序列(a_i)翻转,做一次(KMP)((fail[i])),枚举(k+1)的位置(i),则周期(p=i-fail[i], k=n-i)。更新答案。

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

    Problem K Untangling Chain

    题目描述:在二维平面上,从((0, 0))出发(开始时向右走),向前走一段距离(整数),然后向左转或向右转,重复若干次。给出路径,改变每一次走的距离(不能改变转向),使得路径不相交。输出一种方案。

    solution
    记录(x, y)的最大最小值,每次走的时候走到对应的边界加一即可。

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

    Problem L Vacation Plans

    题目描述:给出(s(s leq 3))个图,每个图是一个有向图((n)点,(m)条边),有点权,有边权。每个图有一个目的地,出发点都是(1),每一时刻经过一条边,花费为边权,或者停止不动,花费为点权。现要求同时出发,同时到达目的地,问总花费的最小值。

    solution
    枚举时间,三个图同时(dp),更新答案,卡一下时就可以了,兜圈不会兜很多遍。

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

  • 相关阅读:
    C语言学习_C如何在一个文件里调用另一个源文件中的函数
    C语言学习_include<>与include""的区别
    C语言学习_一个简单程序的解释与C学习方法概括
    python_list和tuple互转
    C语言学习_恶搞小程序
    Linux命令(基础1)
    Linux基础配置
    面向对象知识补充1
    linux系统centOS在虚拟机下的自定义安装
    sql注入
  • 原文地址:https://www.cnblogs.com/GerynOhenz/p/8688091.html
Copyright © 2011-2022 走看看