原博客网页——洛谷博客

题目地址

如果您对群论有所了解,那么本题就是对二面体群 \(D_{2n}\) 的简单实现,您可以直接跳到代码部分。下面的解题思路只是对二面体群 \(D_{2n}\) 的构造思路的诠释。

解题思路

(为描述方便,记操作类型为 \(op\) 操作变量为 \(k\) 的操作为 \((op,k)\),连续两次操作记作 \((op,k)*(op',k')\))

  • 对于两次旋转,显然有 \((0,k)*(0,k')=(0,(k+k') \mod n)\) 。

  • 对于旋转再关于 \(x\) 对称,显然有 \((0,k)*(1,0)=(1,k)\)

  • 对于关于 \(x\) 对称再旋转,发现反转后,顶点标号从逆时针转为顺时针(反之亦然),旋转角度即刻反转,即 \((1,0)*(0,k)=(1,n-k)\)

  • 对于操作 \((1,k)\) ,发现 \(k\) 号轴与 \(x\) 轴的夹角为 \(\frac{\pi k}{n}\) ,且关于 \(k\) 号轴对称相当于旋转 \(\frac{\pi k}{n}\) 弧度、关于 \(x\) 轴对称、再旋转 \(-\frac{\pi k}{n}\) 弧度,于是我们得到恒等式:\((1,k)=(0,\frac{k}{2})*(1,0)*(0,-\frac{k}{2})\) (其中的 \(\frac{k}{2}\) 不一定为整数,这是不太严谨的地方,不过强行把操作变量的范围扩展到半整数也未尝不可)。运用这个等式,推出:

    • \((0,k)*(1,k')=(1,(k+k') \mod n)\)
    • \((1,k)*(0,k')=(1,(k+n-k') \mod n)\)
    • \((1,k)*(1,k')=(0,(k+n-k') \mod n)\)

综上:

  • \((0,k)*(0,k')=(0,(k+k') \mod n)\)
  • \((0,k)*(1,k')=(1,(k+k') \mod n)\)
  • \((1,k)*(0,k')=(1,(k+n-k') \mod n)\)
  • \((1,k)*(1,k')=(0,(k+n-k') \mod n)\)、

我们可以将正多边形的初始状态记作 \((0,0)\) ,那么代码就是对以上四个式子的实现,时间复杂度 \(O(m)\) 。

代码\(_{_{{\text{(数据就是它造的)}}}}\)

#include<cstdio>
using namespace std;
int main() {
int n, m;
int reflect = 0, rotate = 0;
scanf("%d%d", &n, &m);
while (m--) {
int op, k;
scanf("%d%d", &op, &k);
if (reflect) rotate = (rotate + n - k) % n;
else rotate = (rotate + k) % n;
reflect = (reflect + op) % 2;
}
printf("%d %d", reflect, rotate);
return 0;
}

U149791 正多边形变换的更多相关文章

  1. BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]

    1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1383  Solved: 582[Submit][St ...

  2. Hilbert-Huang Transform(希尔伯特-黄变换)

    在我们正式开始讲解Hilbert-Huang Transform之前,不妨先来了解一下这一伟大算法的两位发明人和这一算法的应用领域 Section I 人物简介 希尔伯特:公认的数学界“无冕之王”,1 ...

  3. 【Win 10 应用开发】三维变换

    所谓三维变换,其实是在二维平面上产生三维的视觉效果.前面老周简单提了一下透视效果,如果透视效果不能满需求,那可以考虑用三维变换. UIElement类有一个属性叫Transform3D,它定义的类型为 ...

  4. CSS3之3d变换与关键帧

    3d变换是在transform基础上实现的 transform-style:preserve-3d; 建立3d空间 perspective:; 景深(设置用户看的距离) perspective-ori ...

  5. 纯CSS3实现多层云彩变换飞行动画

    查看效果:http://hovertree.com/texiao/css3/4/效果2 效果图: 代码如下: <!doctype html> <html lang="zh& ...

  6. CSS3之过渡及2D变换

    transition过渡 transition-duration:; 运动时间 transition-delay:; 延迟时间 transition-timing-function:; 运动形式 ea ...

  7. 为什么FFT时域补0后,经FFT变换就是频域进行内插?

    应该这样来理解这个问题: 补0后的DFT(FFT是DFT的快速算法),实际上公式并没变,变化的只是频域项(如:补0前FFT计算得到的是m*2*pi/M处的频域值, 而补0后得到的是n*2*pi/N处的 ...

  8. 相机变换与Ray-Casting

    p { margin-bottom: 0.1in; direction: ltr; line-height: 120%; text-align: justify; orphans: 0; widows ...

  9. UVA 12300 Smallest Regular Polygon(正多边形)

    题意:给出两点,求经过这两点的正n边形的最小面积 题解:这两点一定是最长的弦,我们设正多边形中点c,找到c到每个点的距离(都相同) 我们知道那个等腰三角形的底与每个角度就使用余弦定理 #include ...

随机推荐

  1. Stream中的Peek操作

    1.引言 如果你试图对流操作中的流水线进行调试, 了解stream流水线每个操作之前和操作之后的中间值, 该如何去做? 首先我们看一个例子, 使用forEach将流操作的结果打印出来. 1 /** 2 ...

  2. https 真的安全吗,可以抓包吗,如何防止抓包吗

    Android_interview github 地址 大家好,我是程序员徐公,加上实习,有五年中大厂经验.自荐一下,可以关注我的微信公众号程序员徐公 公众号程序员徐公回复黑马,获取 Android ...

  3. ChromiumWebBrowser 禁用右键菜单

    /// <summary>    /// 禁用嵌套页面的右键菜单    /// </summary>    public class MenuHandler : IContex ...

  4. Epicor Advanced Unit of Measure

    作为先进的ERP系统,Epicor 不断发展以解决业务问题.2020 年 10 月,Epicor ERP 10.2.700 的一项强大的新功能高级计量单位 (UoM) 已投入生产. 发行说明看似简单, ...

  5. 论鸿蒙OS在某些人眼中的样子

    对于鸿蒙OS,博客园有一篇文章<为鸿蒙OS说两句公道话(我对鸿蒙OS的一些看法)>.有兴趣的可以看看. 在这篇文章中,个人觉得最精彩的不是文章本身,而是评论内容. 下面我挑一些出来,和大家 ...

  6. pytest + allure

    参考allure官网: https://docs.qameta.io/allure/#_pytest 1.使用命令pip install pytest-allure安装 注意:我遇到的一个现象,用命令 ...

  7. 如何安装selenium以及scrapy,最重要的是pip?

    一般的步骤: # Selenium安装配置        # 1. 安装python的selenium包:pip install selenium# 2. Selenium驱动(Chrome)下载: ...

  8. 深入探索Glide图片加载框架:做了哪些优化?如何管理生命周期?怎么做大图加载?

    前言 Glide可以说是最常用的图片加载框架了,Glide链式调用使用方便,性能上也可以满足大多数场景的使用,Glide源码与原理也是面试中的常客. 但是Glide的源码内容比较多,想要学习它的源码往 ...

  9. nvGRAPH API参考分析(一)

    nvGRAPH API参考分析(一) 本文通过描述nvGRAPH库函数的输入/输出参数,数据类型和错误代码来指定其行为. 1.    返回值nvgraphStatus_t 除以下内容外,所有nvGRA ...

  10. 利用UltraScale和UltraScale+FPGA和MPSOC加速DSP设计生产力

    利用UltraScale和UltraScale+FPGA和MPSOC加速DSP设计生产力 Accelerating DSP Design Productivity with UltraScale an ...