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. Python成长之路第一篇(2)__初识列表和元组

    可以将列表和元组当成普通的“数组”,他能保存任意数量任意类型的Python对象,和数组一样都是通过数字0索引访问元素,列表和元组可以存储不同类型的对象,列表和元组有几处重要区别.列表元素用([])包括 ...

  2. jQuery Tab选项卡切换代码

    jQuery Tab选项卡切换代码是一款简单的jquery tab选项卡切换网页特效代码样式,可以修改tab选项卡相关样式. 代码下载:http://www.huiyi8.com/sc/10863.h ...

  3. ES 搜索结果expalain 可以类似数据库性能调优来看排序算法的选择

    When we run a simple term query with explain set to true (see Understanding the Score), you will see ...

  4. Custom Database Integration Guide

    Introduction This document provides instructions for integrating Openfire authentication, users, and ...

  5. 百度地图API的第一次接触——标注和信息窗的使用

    1.定义js函数,用于在指定位置添加标注,在标注位置添加并打开信息窗口 function addMarker(point, index){ // 创建图标对象 var myIcon = new BMa ...

  6. C# 获取Console的输入和输出 数据 (异步)

    using System ; using System .Diagnostics; using System .IO;   class Program {     static void Main() ...

  7. Ubuntu 复制文件,修改文件名

    复制 cp a b   (a为旧的,b为新的) 修改 mv a b (a为旧的,b为新的)

  8. DBS:目录

    ylbtech-DBS:目录 1.返回顶部 1.   2. 2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   7.返回顶部   8.返回顶部   9.返回顶 ...

  9. win7 64位搭建Mantis 缺陷管理系统(2)

    建立Bug数据库 1. 右键Windows托盘的图标,选择“Local Web”,(或者在IE地址中输入“http://127.0.0.1/”)可看到如下页面: 2. 点击选择“mantis”,进入页 ...

  10. 关于ajaxfileupload的使用方法以及一些问题

    使用问题: 1.ajax-fileupload.js handleError 异常 由于本来handleError方法是jquery的方法,但jquery到了某个版本这个方法就去掉了没有了 所以最简单 ...