抽代的成分远远大于OI的成分

首先把一个点定为原点,然后我们发现如果我们不旋转此时答案就是所有位置的\(\gcd\)

如果要旋转怎么办,我们考虑把我们选定的网格边连同方向和大小看做单位向量\(\vec e\)

那么此时我们把坐标系变成复平面,每个点都可以表示成\((a+bi)\vec e\)的形式

当\(a,b\)均为整数时,它其实是个高斯整数的形式,那么我们可以把带余除法推广到高斯整数环

一些具体的姿势详见:高斯整数余数的一个问题

然后直接推广出辗转相除即可,利用不等式放缩容易得出此时一定是最优的

  1. #include<cstdio>
  2. #include<iostream>
  3. #define int long long
  4. #define RI register int
  5. #define CI const int&
  6. using namespace std;
  7. const int N=100005;
  8. inline int Fix(int x,int y)
  9. {
  10. int f=1; if (x<0) x=-x,f=-1; return (x%y*2<y)?((x/y)*f):((x/y+1)*f);
  11. }
  12. struct Complex
  13. {
  14. int x,y;
  15. inline Complex(CI X=0,CI Y=0)
  16. {
  17. x=X; y=Y;
  18. }
  19. friend inline Complex operator + (const Complex& A,const Complex& B)
  20. {
  21. return Complex(A.x+B.x,A.y+B.y);
  22. }
  23. friend inline Complex operator - (const Complex& A,const Complex& B)
  24. {
  25. return Complex(A.x-B.x,A.y-B.y);
  26. }
  27. friend inline Complex operator * (const Complex& A,const Complex& B)
  28. {
  29. return Complex(A.x*B.x-A.y*B.y,A.y*B.x+A.x*B.y);
  30. }
  31. friend inline Complex operator / (const Complex& A,const Complex& B)
  32. {
  33. Complex iB=Complex(B.x,-B.y),ret=A*iB; int dv=B.x*B.x+B.y*B.y;
  34. return Complex(Fix(ret.x,dv),Fix(ret.y,dv));
  35. }
  36. friend inline Complex operator % (const Complex& A,const Complex& B)
  37. {
  38. return A-((A/B)*B);
  39. }
  40. }a[N],g; int n,mix,mxx,miy,mxy;
  41. inline Complex gcd(const Complex& A,const Complex& B)
  42. {
  43. //printf("%lld %lld %lld %lld\n",A.x,A.y,B.x,B.y);
  44. if (!B.x&&!B.y) return A; return gcd(B,A%B);
  45. }
  46. signed main()
  47. {
  48. RI i; for (scanf("%lld",&n),i=1;i<=n;++i) scanf("%lld%lld",&a[i].x,&a[i].y);
  49. for (i=2;i<=n;++i) a[i]=a[i]-a[1]; for (g=a[2],i=3;i<=n;++i) g=gcd(g,a[i]);
  50. for (i=2;i<=n;++i) a[i]=a[i]/g,mix=min(mix,a[i].x),mxx=max(mxx,a[i].x),
  51. miy=min(miy,a[i].y),mxy=max(mxy,a[i].y); return printf("%lld",max(mxx-mix,mxy-miy)),0;
  52. }

HHHOJ #153. 「NOI模拟 #2」Kotomi的更多相关文章

  1. HHHOJ #151. 「NOI模拟 #2」Nagisa

    计算几何板子题(我才没有拷板子的说--) 众所周知,三角形的重心坐标是\((\frac{x_1+x_2+x_3}{3},\frac{y_1+y_2+y_3}{3})\) 然后我们发现如果我们有一个点集 ...

  2. Solution -「NOI 模拟赛」彩色挂饰

    \(\mathcal{Description}\)   给定一个含 \(n\) 个点 \(m\) 条边的简单无向图,设图中最大点双的大小为 \(s\),则保证 \(s\le6\).你将要用 \(k\) ...

  3. Solution -「NOI 模拟赛」出题人

    \(\mathcal{Description}\)   给定 \(\{a_n\}\),求一个 \(\{b_{n-1}\}\),使得 \(\forall x\in\{a_n\},\exists i,j\ ...

  4. 「CSP-S模拟赛」2019第四场

    「CSP-S模拟赛」2019第四场 T1 「JOI 2014 Final」JOI 徽章 题目 考场思考(正解) T2 「JOI 2015 Final」分蛋糕 2 题目 考场思考(正解) T3 「CQO ...

  5. 「NOI十联测」深邃

    「NOI十联测」深邃 要使得最大的连通块最小,显然先二分答案. 先固定1结点为根. 对于一个果实,显然是先处理子树中未分配的点,再向外延伸. 每个结点记录一个\(si[]\),表示子树中未分配的点数, ...

  6. 「NOI十联测」奥义商店

    「NOI十联测」奥义商店 若lzz想花费最少的钱,那么显然要选择数目较少的颜色. 先考虑暴力的写法. 每次向两边统计,每个物品要求被买的概率可以由上一个物品推出. now=1;//now 被买概率 M ...

  7. 「NOI十联测」黑暗

    「NOI十联测」黑暗 \(n\) 个点的无向图,每条边都可能存在,一个图的权值是连通块个数的 \(m\) 次方,求所有可能的图的权值和.(n≤30000,m≤15) 令\(ans[n][m]\)为n个 ...

  8. 「CSP-S模拟赛」2019第三场

    目录 T1 「POI2007」山峰和山谷 Ridges and Valleys 题目 考场思路(几近正解) 正解 T2 「JOI 2013 Final」 现代豪宅 题目 考场思路(正解) T3 「SC ...

  9. 【模拟】HHHOJ#251. 「NOIP模拟赛 伍」高精度

    积累模拟经验 题目描述 维护一个二进制数,支持如下操作 "+" 该数加 11 "-" 该数减 11 "*" 该数乘 22 "\&q ...

随机推荐

  1. Linux学习笔记之grep命令和使用正则表达式

    0x00 正则表达式概述 正则表达式是描述一些字符串的模式,是由一些元字符和字符组成的字符串,而这些元字符是一些表示特殊意义的字符,即被正则表达式引擎表达的字符表示与其本意不同的一些字符. 0x01  ...

  2. texstudio基本设置

    一开始默认为英文,在上面菜单栏,“option” 1.设置中文:options->general->language->zh-cn 2.编辑和查看按钮: 3.设置默认编译器:选项-& ...

  3. 【已解決】谷歌浏览器如何清理缓存(cookie)

    清除缓存快捷键 Ctrl+Shift+Delete

  4. 2019-07-29 ThinkPHP简单的增删改查

    在model里面,建立表名Model.class.php的控制器,用以连接数据表,代码如下 namespace Home\Model; use Think\Model; class NewsModel ...

  5. Java 面向对象—非静态代码块

    一.非静态代码块 1.声明格式 [修饰符] class 类名 { { 非静态代码块 } } 2.非静态代码块中的代码执行时机 (1)在"每次"创建对象的时候执行 (2)比构造方法早 ...

  6. vavr:让你像写Scala一样写Java

    本文阅读时间大约7分钟. Hystrix是Netflix开源的限流.熔断降级组件,去年发现Hystrix已经不再更新了,而在github主页上将我引导到了另一个替代项目--resilience4j,这 ...

  7. 阿里P7教你如何使用 Spring 配置动态数据源实现读写分离

    最近搭建的一个项目需要实现数据源的读写分离,在这里将代码进行分享,以供参考. 关键词:DataSource .AbstractRoutingDataSource.AOP 首先是配置数据源 <!- ...

  8. day 38

    目录 元类 什么是元类 元类的作用 怎么自定义创建元类 元类 什么是元类 用class关键字定义的类本身是一个对象,负责产生该对象的类称之为元类(元类可以简称为类的类),内置的元类为type 元类的作 ...

  9. java项目路径总结,java.io.File支持的路放方式

    1.直接输入路径 已maven项目为例,直接输入路径的4种方式,即是File类支持的方式: /** * FileOutpurStream以字节数组方式写入文件 * @throws IOExceptio ...

  10. Gzip模块

    Gzip模块为python的压缩和解压缩模块,读写gzip 文件 一.使用gzip模块压缩文件: 1 import gzip #导入python gzip模块,注意名字为全小写 2 g = gzip. ...