[题解]CodeForces1208G Polygons
CodeForces1208G Polygons
What an interesting problem QuuuuQ...
题目描述
给出一个圆,找出k个边长在\([3,n]\)范围内且互不相同的正多边形,通过旋转使得总的顶点个数最少。问最少的顶点个数
\(3 \leq n \leq 10^6,1 \leq k \leq n-2\)
Solution
amazing~.
首先,手模一下可以发现,假设我们选择了边长为\(l\) 的正多边形,那么,选择所有边长为\(l\)的因数的正多边形一定只会更优,因为在这种情况下不会增加点的个数
然后,所有多边形至少有一个公共点,显然,记这个点为P
那么,假设圆的周长为1,记圆上每一个点的位置为顺时针方向距离P的距离
对于一个正\(l\)边形,它的顶点就是\(0,\frac{1}{l},\frac{2}{l},...,\frac{l-1}{l}\),最终的答案就是不同的最简分数的个数。而对于l,如果分母和分子不互质,那么变成最简分数后分母就是\(l\)的一个因子\(x\),这个点已经被正\(x\)变形算过了,所以对于\(l\),新增的点的个数就是\(\phi (l)\).
注意没有2边形,所以需要特判
关于欧拉函数\(\phi\)
\(\phi (x)=x*\prod_{i=1}^{n} 1-\frac{1}{p_i}\),其中,p是x的质因数
可以利用埃式筛法求欧拉函数
void INIT(){int cnt=0;a[1].val=a[1].num=1;rep(i,2,n){a[i].num=i;if(!vis[i])p[++cnt]=i,a[i].val=i-1;for(int j=1;j<=cnt&&p[j]<=n/i;j++){vis[i*p[j]]=1;if(i%p[j]==0){a[i*p[j]].val=a[i].val*p[j];continue;}a[i*p[j]].val=a[i].val*(p[j]-1);}}
}
Code
#include<bits/stdc++.h>
#define rep(X,A,B) for(int X=A;X<=B;X++)
#define tep(X,A,B) for(int X=A;X>=B;X--)
#define LL long long
const int N=1000010;
const int M=2100010;
using namespace std;int n,k,f[N],vis[N],p[N];struct nn{int val,num;
}a[N];int cmp(nn A,nn B){if(A.val==B.val)return (A.num&1)>(B.num&1);return A.val<B.val;
}void INIT(){int cnt=0;a[1].val=a[1].num=1;rep(i,2,n){a[i].num=i;if(!vis[i])p[++cnt]=i,a[i].val=i-1;for(int j=1;j<=cnt&&p[j]<=n/i;j++){vis[i*p[j]]=1;if(i%p[j]==0){a[i*p[j]].val=a[i].val*p[j];continue;}a[i*p[j]].val=a[i].val*(p[j]-1);}}
}void SOLVE(){LL ans=0;int flg=0;sort(a+1,a+n+1,cmp);rep(i,3,k+2){//printf("a[%d]=%d %d\n",i,a[i].val,a[i].num);ans+=1LL*a[i].val;if(a[i].num%2==0)flg=1;}printf("%lld\n",ans+flg+1);
}int main(){scanf("%d%d",&n,&k);INIT();SOLVE();return 0;
}
转载于:https://www.cnblogs.com/SCL123/p/11599916.html
[题解]CodeForces1208G Polygons相关推荐
- 2017 ACM ICPC Asia Shenyang Regional Contest 题解(10 / 13)【每日亿题2 / 16】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A.(2017 ICPC shenyang I)Little Boxes B.(2017 ICP ...
- UVALive 3959 Rectangular Polygons (排序贪心)
Rectangular Polygons 题目链接: http://acm.hust.edu.cn/vjudge/contest/129733#problem/G Description In thi ...
- ICPC训练联盟2021寒假冬令营(2)(部分题解)
ICPC训练联盟2021寒假冬令营(2)(部分题解) B - Diplomatic License In an effort to minimize the expenses for foreign ...
- [JS][dfs]题解 | #迷宫问题#
题解 | #迷宫问题# 题目链接 迷宫问题 题目描述 定义一个二维数组 N*M ,如 5 × 5 数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 1, 1 ...
- [JS][dp]题解 | #打家劫舍(一)#
题解 | #打家劫舍(一)# 题目链接 打家劫舍(一) 题目描述 描述 你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家, ...
- [JS]题解 | #魔法数字#
题解 | #魔法数字# 题目链接 魔法数字 题目描述 牛妹给牛牛写了一个数字n,然后又给自己写了一个数字m,她希望牛牛能执行最少的操作将他的数字转化成自己的. 操作共有三种,如下: 在当前数字的基础上 ...
- [JS]题解 | #岛屿数量#
题解 | #岛屿数量# 题目链接 岛屿数量 题目描述 时间限制:1秒 空间限制:256M 描述 给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛.我们只考虑上下左右 ...
- [JS] 题解:提取不重复的整数
题解:提取不重复的整数 https://www.nowcoder.com/practice/253986e66d114d378ae8de2e6c4577c1 时间限制:1秒 空间限制:32M 描述 输 ...
- 洛谷-题解 P2672 【推销员】
独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...
最新文章
- 使用angular的好处_在项目中使用Angular的最大好处
- Unity iPhone Touch Animation Tutorial,untiy3d iphone简单动画开发教程
- Altium Designer 规则设置Advance(Query)的使用
- Python 实例方法、类方法、静态方法的区别与作用
- python-day49--前端 html
- 牛客 - Dance with a stick(大风车模型)
- LeetCode 515. 在每个树行中找最大值(层序遍历)
- java函数调用约定_2020-09-04:函数调用约定了解么?
- 一文看懂Java锁机制
- Unity游戏开发——Excel数据读取到游戏中
- 如何在.Netcore控制台应用中使用依赖注入(4)
- java string 转 class_java-String类的转换功能
- Foursquare 8.0 :聪明人给互联网公司上的流量转化课
- 网络安全和CTF相关内容
- 面试官问:你的缺点是什么,这么回答漂亮!(真实案例)
- 发票查验API可以查验的发票类型有哪些?
- 云和恩墨校园招聘开始啦!
- 【IoT】产品设计:包装盒型设计
- uniapp调用android原生方法
- 锦鱼课堂:2021做什么副业好?零门槛赚钱小副业
热门文章
- [sudo rm -rf /bin/] Linux误删除/bin目录恢复
- 真·电子二胡 (ESP32配合库乐队APP实现的电子制作)
- Django的多应用分布式路由
- java画笑脸_canvas画笑脸
- linux配置文件密码加密工具,Linux下利用openssl对文件进行加密和解密
- 美团王兴,为什么让骑手注册个体户?详解他的套路,望周知
- 【Java获取国家法定节假日三种工具类其一】
- qrcode将生成的二维码转成img格式
- 辞职后如何办理档案、户口、党组织关系、公积金
- ios点击推送闪退_王者ios14苹果手机闪退已修复,腾讯痛失百万玩家能否再回来...