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相关推荐

  1. 2017 ACM ICPC Asia Shenyang Regional Contest 题解(10 / 13)【每日亿题2 / 16】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A.(2017 ICPC shenyang I)Little Boxes B.(2017 ICP ...

  2. UVALive 3959 Rectangular Polygons (排序贪心)

    Rectangular Polygons 题目链接: http://acm.hust.edu.cn/vjudge/contest/129733#problem/G Description In thi ...

  3. ICPC训练联盟2021寒假冬令营(2)(部分题解)

    ICPC训练联盟2021寒假冬令营(2)(部分题解) B - Diplomatic License In an effort to minimize the expenses for foreign ...

  4. [JS][dfs]题解 | #迷宫问题#

    题解 | #迷宫问题# 题目链接 迷宫问题 题目描述 定义一个二维数组 N*M ,如 5 × 5 数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 1, 1 ...

  5. [JS][dp]题解 | #打家劫舍(一)#

    题解 | #打家劫舍(一)# 题目链接 打家劫舍(一) 题目描述 描述 你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家, ...

  6. [JS]题解 | #魔法数字#

    题解 | #魔法数字# 题目链接 魔法数字 题目描述 牛妹给牛牛写了一个数字n,然后又给自己写了一个数字m,她希望牛牛能执行最少的操作将他的数字转化成自己的. 操作共有三种,如下: 在当前数字的基础上 ...

  7. [JS]题解 | #岛屿数量#

    题解 | #岛屿数量# 题目链接 岛屿数量 题目描述 时间限制:1秒 空间限制:256M 描述 给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛.我们只考虑上下左右 ...

  8. [JS] 题解:提取不重复的整数

    题解:提取不重复的整数 https://www.nowcoder.com/practice/253986e66d114d378ae8de2e6c4577c1 时间限制:1秒 空间限制:32M 描述 输 ...

  9. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

最新文章

  1. 使用angular的好处_在项目中使用Angular的最大好处
  2. Unity iPhone Touch Animation Tutorial,untiy3d iphone简单动画开发教程
  3. Altium Designer 规则设置Advance(Query)的使用
  4. Python 实例方法、类方法、静态方法的区别与作用
  5. python-day49--前端 html
  6. 牛客 - Dance with a stick(大风车模型)
  7. LeetCode 515. 在每个树行中找最大值(层序遍历)
  8. java函数调用约定_2020-09-04:函数调用约定了解么?
  9. 一文看懂Java锁机制
  10. Unity游戏开发——Excel数据读取到游戏中
  11. 如何在.Netcore控制台应用中使用依赖注入(4)
  12. java string 转 class_java-String类的转换功能
  13. Foursquare 8.0 :聪明人给互联网公司上的流量转化课
  14. 网络安全和CTF相关内容
  15. 面试官问:你的缺点是什么,这么回答漂亮!(真实案例)
  16. 发票查验API可以查验的发票类型有哪些?
  17. 云和恩墨校园招聘开始啦!
  18. 【IoT】产品设计:包装盒型设计
  19. uniapp调用android原生方法
  20. 锦鱼课堂:2021做什么副业好?零门槛赚钱小副业

热门文章

  1. [sudo rm -rf /bin/] Linux误删除/bin目录恢复
  2. 真·电子二胡 (ESP32配合库乐队APP实现的电子制作)
  3. Django的多应用分布式路由
  4. java画笑脸_canvas画笑脸
  5. linux配置文件密码加密工具,Linux下利用openssl对文件进行加密和解密
  6. 美团王兴,为什么让骑手注册个体户?详解他的套路,望周知
  7. 【Java获取国家法定节假日三种工具类其一】
  8. qrcode将生成的二维码转成img格式
  9. 辞职后如何办理档案、户口、党组织关系、公积金
  10. ios点击推送闪退_王者ios14苹果手机闪退已修复,腾讯痛失百万玩家能否再回来...