zoukankan      html  css  js  c++  java
  • ZJOI2017 Day2

    私のZJOI

    Day2

    2017-3-22 08:00:07

    其实完全可以看那些大佬的ppt,分享见网址大佬ppt

    只不过好像有人抄我博客的样子……这也是一种荣幸嘛……好不容易写篇博客然后被抄,也在一种层面上说明我写的博客写得好吧。【逃……
    但还是认准我的博客正文链接哦Hash大法好

    AtCoder试题选讲

    SYC(Sun Yican) from Shaoxing No.1 High School
    2017-3-22 08:00:07

    AtCoder简介自己看。

    1.寿司

    有一个长为N数列A,初始全为0.
    有Q次操作,每次操作两个参数X,Y

    • 在A[1],A[2]…A[X]中找出最小的数,如果有多个找小标最小的,设找到了u
    • A[u] = A[u] + 1
    • 重复这个过程Y次
    Solution:

    A[i] >= A[i + 1] 恒成立
    用线段树维护段。时间复杂度O((N+Q)logQ)

    2.BBQ Hard

    AGC001

    • 有N个食物包,第i个内有1个竹签,A[i]块肉,B[i]个菜
    • 竹签两两可区分,但是肉和菜不是
    • 你要做一个烤串,你会挑选两个数i,j(i < j ),然后把i,j两个包中的食物和竹签都拿出来串成一串,食材可以任意排列
    • 问有多少种不同的方案(mod 10^9 + 7)
    • N <= 2e5, A[i] ,B[i] <= 2000
    Solution:

    C(A+B, A) 表示在A*B的矩形上,从左下角走到右上角的方案数。
    所以对于题目,有C( Ai + Bi + Aj + Bj, Ai + Aj ) 同上,再平面上放两个点(A[i], B[i]), (-A[i], -B[i])

    3.Snuke's Coloring 2

    AGC036

    • 在一个平面直角坐标系上,横坐标是[0, w],纵坐标是[0, H]
    • 在平面上有N个点,第i个点的坐标是(xi, yi)
    • 开始时的时候整个平面式白的
    • 对于每个点,有如下四个操作:
      1. 将x<xi的部分全部涂黑
      2. 将x>xi的部分全部涂黑
      3. 将y<yi的部分全部涂黑
      4. 将y>yi的部分全部涂黑
    • 要求最大化最后白色部分的周长
    • N <= 3e5, w, H <= 1e9
    Solution:

    问题转换成找一个周长最大的矩形,里面不包含一个点。
    考虑经过中显得矩形。单调栈+线段树
    T(n) = O(nlog2n)

    但注意到答案至少是2*max(w, H) * 2,分治只要算前两层就可以了。
    复杂度T(n) = O(n logn)

    4.Candy Piles

    AGC002

    • 有N堆糖果,第i堆有A[i]个糖
    • Snuke 和 Ciel在玩游戏,Snuke先手
    • 两人轮流进行,每次必须挑选做两个操作之一
      1. 将当前最大的那堆糖全部吃完
      2. 将当前存在的每堆糖果各吃一个
    • 吃完最后一个的人输,问先手是否必胜。
    • N <= 1e5, A[i] <= 1e9
    Solution:

    把所有的A[i]排序,把这张图形形似条形统计图,然后问题转换成了从左下角有一颗棋子,走到边界算输。
    然后SG函数

    SG函数:
    在一个DAG中,从起点开始,每人走一步,走到不能走的人输
    SG[x] = 0(v无出边) / mex{ sg(w) }
    (mex表示在集合中没出现的最小自然数)
    如果有两张图,就是两张DAG的值异或一下

    打表可以知道SG[i][j]= SG[i + 1][j + 1]

    5.Zig Zag MST

    CodeFestival 2016 final

    • 有N个点,标号0~N - 1,排成一个环,有M次操作。
    • 每次操作有三个参数A[i],B[i],C[i]
    • 他会在这张图上加无穷条边
    • 具体可以用一份代码实现这个过程:AddEdge(x ,y, z)表示x向y连权值为z的有向边
    void Word( int a, int b, int c ) {
        AddEdge(a % N, b % N, c);
        Work( b, a + 1, c + 1);
    }
    for( int i = 0 ; i < M ; i ++ ) {
        Work( A[i], B[i], C[i]);
    }
    
    • 求连完所有边以后MST(最小生成树)的大小
    • N,M <= 1e5
    Solution:

    考虑连的边:
    (A, B, C)
    (B, A + 1, C)
    (A + 1, B + 1, C + 2)
    于是考虑Kruskal,相邻点之间的连边可以扫描线解决。

    6.Robot and String

    Mujin Programming Challenge 2017

    • 定义一种字符串的消除方式:
      • 每次挑选两个相邻的且字符一样的位置,如果有多个,挑选位置最小的那个,将这两个位置上的字符消去,并用字母表中的下一个字符替换它们
      • Especially, 如果你删去的是‘z',那么它们将消失
      • 'xxyz' -> 'yyz' -> 'zz' -> ''
    • 给出一个字符串S,有Q次询问,每次询问给出一个区间[l, r],询问子串[*l, r *],是否能被消完
    • |S| <= 5e5, Q <= 1e5
    Solution:

    考虑第一个字符什么时候被消掉
    当第一个字符被消掉的时候一定删除了一个前缀。
    维护这个东西
    用f[i][j]表示考虑消除[i..n]i第一次变成j的位置
    f[i][j] = f[f[i][j - 1]][j - 1]
    f[i]['z' + 1]就是i第一次被消掉的位置

    7.Many Easy Problems

    AGC005

    • 有一个N个点的树
    • 你在书上随机了K个点,然后找出了包含这K个点的最小连通子图的大小(点数)X
    • 求X的期望呈上C(n ,k)的结果
    • 可以证明是个整数,对924844055(可以NTT)取膜
    • 对每个1 <= K <= N都输出答案
    • N <=200000
    Solution:

    考虑每个店被包含的方案数。然后balabala…

    8.Leftmost Ball

    AGC001

    • 你有N*K个球,它们有N种颜色,每种K个。颜色的编号是1~N,你可以把它们任意摆列,在排列完以后把每种颜色的球最靠做的那个涂成第0种颜色
    • 问最后会有多少种不同的方案
    • 对1e9 + 7取膜
    • N, K <= 2000
    Solution:

    用f[i][j]表示出现了i个0,j个颜色出现了k-1数字的方案数
    f[ i ][ j ] -> f[i + 1][j]
    f[i][j] * C(i + K * j, K - 1) -> f[i][j + 1]

    void fuck( int your, int mother )
    

    9.123 Pairs

    Code Festival Grand Final

    • 有2N个数字,1~2N,你要将他们分成N个Pair,使得每个数字恰好在一个Pair中
    • 要求如果i,j在一个Pair中,那么|i - j| <= 3
    • 并且有恰好有A个Pair满足|i - j| = 1
    • 并且有恰好有B个Pair满足|i - j| = 2
    • 并且有恰好有C个Pair满足|i - j| = 3
    • 计算有多少种不同的方案,答案对1e9+7取膜
    • N,A,B,C <=5000, A + B + C = N
    Solution

    考虑C = 0的情况,B可以考虑成4个连续的配对,从而简单。
    当C ≠ 0时,L1表示A相连,L2表示B相连,L3表示C相连。
    需要连成一个前缀:

    • L1 * 1 : 1 - 2
    • L3 *1 + L1 * 1 : 1 - 4
    • L3 * 3 +
    • ballbala……
      于是O(n^2)枚举

    10.Painting Graphs With AtCoDeer

    ARC062

    • 有一个N个点,M条边的无向图,保证没有重边和自环
    • 你要对每条边染上颜色,颜色有K种
    • 文有多少种本质不同的方案(对1e9+7 )取膜
    • 本质相同的定义如下
      • 考虑两个染色方案A,B
      • 对环进行轮滑,
      • 如果A在有限步内变成B,那么A和B本质相同
    • N,M, K <= 100
    Solution

    每个点的双联通分量显然是独立的
    对于一个环,它有三种情况
    群论???SMG!! (╯‵□′)╯︵┻━┻
    有弃坑转战数学的冲动

    • [x]弃坑
    • [x]不弃坑

    11.Next or Nextnext

    AGC008

    • 有一个长为N的数组A
    • 文有多少长为N的排列P使得 P[i] = A[i] 或P[P[i]] = A[i]
    • 答案对1e9+7取膜
    • N <= 1e5
    Solution

    并不知道

    12.Eternal Average

    AGC009

    13.フイボナツチ数の総和

    Square8691206Contest #3

    好像要高数。。(╯‵□′)╯︵┻━┻

    杂题选讲

    浙江省绍兴市第一中学 洪华敦
    hhdskydec@sina.com

    详见PPT,我不做笔记了

    大佬PPT

  • 相关阅读:
    Flask之threading.loacl方法
    websocket之简易聊天室
    websocket介绍
    Flask之jinja2模板语言
    Flask之基础
    Linux之项目的部署
    Linux之nginx负载均衡
    Linux之nginx
    Linux之redis-cluster
    Linux之redis-sentinel
  • 原文地址:https://www.cnblogs.com/ARZhu-NOIpAK/p/6601676.html
Copyright © 2011-2022 走看看