「CF1208G」 Polygons
「CF1208G」 Polygons
似乎我校神犇在很久以前和我提过这题?
首先有一点显而易见:这 \(k\) 个多边形肯定至少有一个公共的顶点。假设我们将此点定义为起点。
那么对于一个正 \(n\) 边形,每一条边所截的短弧所对应的圆心角大小相等,所以我们可以把顶点标记为 \(\frac{1}{n},\frac{2}{n},\frac{3}{n},\cdots,\frac{n}{n}\)。
那么有结论:对于任意一个正 \(n\) 边形的顶点,当且仅当顶点标号为一个最简分数时才会被统计进答案。
证明也很简单,假设存在一个正 \(n\) 边形顶点标号为非最简分数被统计进答案,那么将标号化为最简分数后其所对应的正多边形我们一定没有选择。但是显然这个正多边形的点数比我们刚才选择的正 \(n\) 边形要少,这与题目要求相悖,故假设不成立。
因为 \(n\ge 3\),所以有两个顶点没有被我们统计到:\(\frac{1}{2} , \frac{n}{n}\) 。
考虑特判:
当 \(k=1\) 时我们一定会选择正三角形,其包含 \(\frac{n}{n}\)。
当 \(k=2\) 时我们可以选择正三角形和正四边形,其包含 \(\frac{1}{2} , \frac{n}{n}\)。
当 \(k\ge 3\) 时由于已经选择了正三角形和正四边形,未统计的两个顶点已经统计,所以不受影响。
考虑对一个正 \(n\) 边形统计这样的最简分数,很显然可以发现答案就是 \(\varphi(n)\)。所以我们选择从 \(\varphi(5)\) 开始的前 \(k\) 大的欧拉函数值即可。
总时间复杂度为 \(O(n\log_2n)\),使用基数排序可优化至 \(O(n)\)。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
int p[maxn],pri[maxn],phi[maxn],cnt;
int n,k;
int init(){
phi[1]=1;
for(int i=2;i<=n;++i){
if(!p[i]){
pri[++cnt]=i,phi[i]=i-1;
}
for(int j=1;j<=cnt&&pri[j]*i<=n;++j){
p[pri[j]*i]=1;
if(i%pri[j]==0){
phi[pri[j]*i]=phi[i]*pri[j];
break;
}
else phi[i*pri[j]]=phi[i]*(pri[j]-1);
}
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>k;
if(k==1) cout<<3<<'\n',exit(0);
if(k==2) cout<<6<<'\n',exit(0);
init();
sort(phi+5,phi+n+1);
long long ans=6;
for(int i=5;i<=5+k-2-1;++i) ans+=phi[i];
cout<<ans<<'\n';
return 0;
}
「CF1208G」 Polygons的更多相关文章
- 「译」JUnit 5 系列:条件测试
原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...
- 「译」JUnit 5 系列:扩展模型(Extension Model)
原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...
- JavaScript OOP 之「创建对象」
工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...
- 「C++」理解智能指针
维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...
- 「JavaScript」四种跨域方式详解
超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...
- 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management
写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...
- 「2014-3-18」multi-pattern string match using aho-corasick
我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...
- 「2014-3-17」C pointer again …
记录一个比较基础的东东-- C 语言的指针,一直让人又爱又恨,爱它的人觉得它既灵活又强大,恨它的人觉得它太过于灵活太过于强大以至于容易将人绕晕.最早接触 C 语言,还是在刚进入大学的时候,算起来有好些 ...
- 「2014-3-13」Javascript Engine, Java VM, Python interpreter, PyPy – a glance
提要: url anchor (ajax) => javascript engine (1~4 articles) => java VM vs. python interpreter =& ...
随机推荐
- Python+Selenium学习笔记5 - python官网的tutorial - 交互模式下的操作
这篇笔记主要是从Python官网的Tutorial上截取下来,再加上个人理解 1. 在交互模式下,下划线'_'还可以表示上一步的计算结果 2.引号转义问题. 从下图总结的规律是,字符串里的引号如果和引 ...
- nvJPEG Codec库
nvJPEG Codec库 nvJPEG库是高性能的GPU加速库,用于解码,编码和转码JPEG格式的图像.nvJPEG2000库用于解码JPEG 2000格式的图像.与单CPU解码相比,依赖nvJPE ...
- TensorRT 7.2.1 开发概要(下)
TensorRT 7.2.1 开发概要(下) 1.2. Where Does TensorRT Fit? 一般来说,开发和部署深度学习模型的工作流要经过三个阶段. Phase 1 is trainin ...
- Xilinx Zynq FPGA Boards板
Xilinx Zynq FPGA Boards板 Xilinx Zynq FPGA Boards 介绍 Styx是一个易于使用的Zynq开发模块,具有Xilinx的Zynq ZC7020 SoC和FT ...
- 单点突破:Spring(上)
Spring概述 我们常说的 Spring 实际上是指 Spring Framework,而 Spring Framework 只是 Spring 家族中的一个分支而已.Spring 是为了解决企 ...
- 618技术特辑(三)直播带货王,“OMG买它”的背后,为什么是一连串技术挑战?
[本期推荐]为什么一到大促,我们的钱包总是被掏空?是大家自制力不够,还是电商平台太会读懂人心,从技术维度,抽丝剥茧一探究竟. 摘要:动辄几十上百万人同时在线的直播间,让所有人能同时公平的去抢购,并且还 ...
- raft 图解 (秒懂)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- DBA入门相关知识介绍
DBA(database administrator):数据库管理员 DBMS(database management system):数据库管理系 ...
- Django-Auth模块之auth_user表
一.Auth模块之auth_user表 在创建Django项目之后直接执行数据迁移命令会自动生成许多表. Django在启动之后就可以直接访问admin路由,需要输入用户名和密码,数据参考的就是aut ...
- ceph-csi源码分析(5)-rbd driver-nodeserver分析(上)
更多 ceph-csi 其他源码分析,请查看下面这篇博文:kubernetes ceph-csi分析目录导航 ceph-csi源码分析(5)-rbd driver-nodeserver分析(上) 当c ...