Codeforces Round #566 (Div. 2)

A Filling Shapes

给定一个 \(3\times n\) 的网格,问使用 这样的占三个格子图形填充满整个网格的方案数

如果 \(n\) 是奇数,那么显然无解,否则考虑每个 \(3\times2\) 的方格正好能塞下两个这玩意而且必须这样塞进去,方案数为 \(2\),因此答案为 \(2^{n/2}\)

B Plus from Picture

给定一个 \(h\times w\) 的矩阵,每个元素为 "." 或者 "*"。询问该矩阵内是否存在且仅存在一个 "*" 十字形,十字形的定义是有一个中心,且中心的四个方向都延长出去至少一格,并且不能有其它的 "*" 出现

寻找一个中心点,如果一个位置是 "*" 并且它四个方向都是 "*" 那么它必然是中心点。把以其为中心的十字形删去,判断是否有剩余的 "*" 即可

C Beautiful Lyrics

给定一堆字符串,定义一个 lyric 是四个字符串 s1,s2,s3,s4 满足 s1的元音字母个数和s3的元音字母个数相等,s2的元音字母个数和s4的元音字母个数相等,s2的最后一个元音字母和s4的最后一个元音字母相同。问这些字符串最多能组成多少个 lyric 要求每个字符串最多只能使用一次(即只能用在一个 lyric中),若输入了多个相同的字符串那么这个字符串可以使用输入的个数次

不难发现有用的只有一个串的元音个数和这个串的最后一个元音字母。优先匹配元音个数和最后一个元音字母都相同的串,因为这样的串放在 s1和s3 和放在 s2和s4 同样可行。那么对于一个给定的元音个数和元音字母最多剩下一个这样的串(没别的跟它配对了),这样的串按照元音个数再配一次对,那么对于一个指定的元音个数,最多剩下一个串没有配对,只能扔掉了。然后令只有个数相同的配对存储在 \(A\) 集合里面,元音个数和字母都相同的存储在 \(B\) 集合里面,那么如果 \(|A|\geq|B|\),那么答案就是 \(|A|\),否则就是先把 \(B\) 中的一些作为 s2,s4 和 \(A\) 中的一些作为 s1,s3 配成 lyric,直到 \(A\) 用光为止。然后继续把 \(B\) 里面的自己配一下,即可得到最优解。贪心正确性显然。

D Complete Mirror

给定一棵树,现在要求寻找一个根节点,满足到根节点距离相等的一堆节点的度数都相同,即只要 depth[i]=depth[j] 那么 degree[i]=degree[j]

首先考虑最终的树的构造,每个有大于一个儿子的子树的所有儿子应当完全相同

有两种做法

1:把所有叶子所在的枝(就是所有叶子以及其网上每个点都只有一个儿子的形成一条链的一段)删掉,剩下的就是上图中 mid level 部分 那么这个部分的 root 是很好找的,因为这棵树中只有一个点能够将整棵树分成 size 相同的几个部分,可以通过 dfs 一遍直接找出来

2:寻找树的直径,然后首先检查两端点,如果都不是证明树的直径应当是下图这样

这样的话 semi top 一定是直径的中点,然后检查一下这个点以及到这个点成链的一些点(就是说到这个点路径上所有点的度数都为2的最远的一些点),如果都不行显然就无解

E Product Oriented Recurrence

给定一个递推式 \(f_{x} = c^{2x-6} \cdot f_{x-1} \cdot f_{x-2} \cdot f_{x-3}\) 以及 \(f_1,f_2,f_3,c\) 的值,求第 \(n\) 项是多少(\(n\leq 10^{18}\))

首先观察 \(c^{2x-6}\),发现其就是 \(\frac {c^{x-1}\cdot c ^ {x - 2} \cdot c ^{x - 3}} {c ^ x}\)

那么令 \(g_x=c^x\cdot f_x\),则有 \(g_x=g_{x-1}\cdot g_{x-2} \cdot g_{x-3}\)

那么可以用矩阵存储每一项中 \(g_1,g_2,g_3\) 的次数,然后矩阵乘法转移一下

记得最终要除以 \(c_x\)

F Maximum Sine

令 \(f(x) = \text{abs}(\sin(\frac{p}{q} \pi x))\)
给定了 \(p,q\) 现在要求一个在 \([a,b]\) 范围内的整数 \(x\),满足 \(f(x)\) 最大
有多组询问,询问组数 \(\leq100\)

不难发现,对于 \(x,y \in [0,\pi]\) 而言,\(\sin(x) \leq \sin(y)\) 当且仅当 \(|x-\frac \pi 2| \leq |y - \frac \pi 2|\),并且题目中的 \(f(x)\) 的最小正周期是 \(\pi\)

那么我们可以将题目修改成寻找 \([a,b]\) 范围内的一个整数 \(x\),使得 \(\frac p q x\) 的小数部分最接近 \(\frac 1 2\),即寻找一个 \(x\) 使得 \(2px \mod 2q\) 最接近 \(q\)

令 \(g(x) = 2px \mod 2q\)。令 \(t = \sqrt{b-a+1}\) 并且建立一个表如下 \([(g(a), a), (g(a+1), a+1), \ldots (g(a+t-1), a+t-1)]\)

这样我们可以找到任意的 \(x\) 满足 \(g(x)\) 和 \(y\) 最接近,现在我们可以直接找出任意一个 \([a,b]\) 之间的数而不用修改我们的表,因为 \(g(x)+g(y)=g(x+y) \pmod {2q}\)

因此每一次询问需要 \(\sqrt{b-a+1}\) 次操作,我们的目标值是 \(q-2 \cdot i \cdot t \cdot p \mod {2q}\) 对于第 \(i\) 次操作。最终我们为了保证范围还要再暴力一遍。

Codeforces Round #566 (Div. 2)的更多相关文章

  1. Codeforces Round #566 (Div. 2) C. Beautiful Lyrics

    链接: https://codeforces.com/contest/1182/problem/C 题意: You are given n words, each of which consists ...

  2. Codeforces Round #566 (Div. 2) B. Plus from Picture

    链接: https://codeforces.com/contest/1182/problem/B 题意: You have a given picture with size w×h. Determ ...

  3. Codeforces Round #566 (Div. 2) A. Filling Shapes

    链接: https://codeforces.com/contest/1182/problem/A 题意: You have a given integer n. Find the number of ...

  4. Product Oriented Recurrence(Codeforces Round #566 (Div. 2)E+矩阵快速幂+欧拉降幂)

    传送门 题目 \[ \begin{aligned} &f_n=c^{2*n-6}f_{n-1}f_{n-2}f_{n-3}&\\ \end{aligned} \] 思路 我们通过迭代发 ...

  5. Codeforces Round #566 (Div. 2)题解

    时间\(9.05\)好评 A Filling Shapes 宽度为\(3\),不能横向填 考虑纵向填,长度为\(2\)为一块,填法有两种 如果长度为奇数则显然无解,否则\(2^{n/2}\) B Pl ...

  6. Codeforces Round #566 (Div. 2)C(字符串,SET)

    #include<bits/stdc++.h>using namespace std;string s[100007];set<int>st[100007][7];int t[ ...

  7. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  8. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  9. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

随机推荐

  1. linux svn yum 安装、开机自启动

    1.查询是否安装 rpm -qa subversion

  2. N1游记

    考试一年前:要认真学文化课,所以还是别报七月的了吧,等到年底就该稳了. 考试半年前:虽然暑假没学,但是到了年底就该稳了. 考试一个月前:我咋还要考N1,算了不管了,到时候再说吧. 考试一周前:我一定要 ...

  3. ACM学习历程—HDU 4726 Kia's Calculation( 贪心&&计数排序)

    DescriptionDoctor Ghee is teaching Kia how to calculate the sum of two integers. But Kia is so carel ...

  4. setsockopt函数功能及参数详解

    Socket描述符选项[SOL_SOCKET] #include <sys/socket.h> int setsockopt( int socket, int level, int opt ...

  5. 洛谷 P4238 [模板] 多项式求逆

    题目:https://www.luogu.org/problemnew/show/P4238 看博客:https://www.cnblogs.com/xiefengze1/p/9107752.html ...

  6. KCF+Opencv3.0+Cmake+Win10 测试

    配置 需要的文件下载 安装CMake,安装opencv3.0.0 在KCFcpp-master 目录下新建一个文件夹,命名为build 打开CMake-GUI配置如下: 点击Configure,编译器 ...

  7. POJ1330(LCA入门题)

    Nearest Common Ancestors Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 23388   Accept ...

  8. Oracle字符串截断

    字段.SUBSTR(string,start_position,[length]) 求子字符串,返回字符串解释:string 元字符串, start_position 开始位置(从0开始), leng ...

  9. session和cookie(2)

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  10. Key and Certificate Conversion

    Key and Certificate Conversion Private keys and certificates can be stored in a variety of formats, ...