原博客网页——洛谷博客

题目地址

如果您对群论有所了解,那么本题就是对二面体群 \(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. 大对象数据LOB的应用

    概述 由于无结构的数据往往都是大型的,存储量特别大,而LOB(large object)类型主要用来支持无结构的大型数据. 用户可以利用LOB数据类型来存储大型的无结构数据,特别是文本,图形,视频和音 ...

  2. 技术干货 | 关于 WKWebview 网络拦截,你想知道的都在这里

    原生 WKWebView 在独立于 app 进程之外的进程中执行网络请求,请求数据不经过主进程,因此在 WKWebView 上直接使用 NSURLProtocol 是无法拦截请求的. 但是由于 mPa ...

  3. JS实现前台表格排序功能

    JS实现前台表格排序功能 虽然数据量不大的情况下,前台排序速度比较快,但一般情况下,我们的项目只使用后台排序,原因有二: 一是代码简单:二是前台JS排序对于有分页的情况无法处理. 前段时间,有个功能需 ...

  4. 本地软件仓库配置及NFS安装

    [root@localhost ~]# mount /dev/cdrom /mnt mount: /dev/sr0 is write-protected, mounting read-only [ro ...

  5. CAS(Compare and Swap)无锁算法-学习笔记

    非阻塞同步算法与CAS(Compare and Swap)无锁算法 这篇问题对java的CAS讲的非常透彻! 锁的代价 1. 内核态的锁的时候需要操作系统进行一次上下文切换,加锁.释放锁会导致比较多的 ...

  6. Docker删除某个容器时失败解决方案

    删除某个容器时,报错 ocker rm 容器id   image is being used by stopped container e11efb30362a   该报错的原因是要删除的该镜像,被某 ...

  7. Docker环境下运行python+selenium+chrome

    Docker环境下运行python+selenium+chrome docker运行时占用的资源非常少,而且能将环境进行有效的隔离,可以快速的进行部署,因此可以将docker与selenium结合实现 ...

  8. js的基本数据类型和typeof的关系

    JavaScript数据类型是非常简洁的,它定义了6中基本数据类型 null:空.无.表示不存在,当为对象的属性赋值为null,表示删除该属性 undefined:未定义.当声明变量却没有赋值时会显示 ...

  9. Pptx的形状转为WPF的Geometry

    本文是将演示如何解析pptx文件的形状到WPF当中,并且绘制显示出来 安装Openxml sdk 首先,我们先安装nuget的openxml sdk,下面两种方式都可以安装: nuget包管理器控制台 ...

  10. TVM性能评估分析(七)

    TVM性能评估分析(七) Figure 1.  Performance Improvement Figure 2.  Depthwise convolution Figure 3.  Data Fus ...