「AGC025D」 Choosing Points

神仙构造题。

首先你会尝试暴力做,先随便选一个点,然后把当前能选得全选上,然后你发现这样样例都过不了。

然后我们可以这样考虑:你把距离为 \(\sqrt{D}\) 的点连起来,会得到一个二分图。

考虑分情况讨论:

  • \(D \equiv 3 \pmod 4\)

    根据小学二年级的数学知识可知这种情况不存在。

  • \(D \equiv 1 \pmod 2\)

    此时有 \((x_1-x_2)^2+(y_1-y_2)^2\equiv|x_1-x_2|+|y_1-y_2|\equiv (x_1-x_2)+(y_1-y_2)\equiv 1\pmod 2\)

    显然可以按照 \((x+y)\) 的奇偶性进行分组。

  • \(D \equiv 0 \pmod 2\)

    现在好像处理不了了,我们可能需要继续分组。

    • \(D \equiv 2 \pmod 4\)

      根据小学二年级得到数学知识显然没有 \(x^2\equiv 2\pmod 4\),所以一定有 \((x_1-x_2)^2\equiv 1 \and (y_1-y_2)^2\equiv 1\)。按照 \(x\) 的奇偶性分组后,有边相连的显然不在同一组。

    • \(D \equiv 0 \pmod 4\)

      根据小学二年级得到数学知识显然没有 \(x^2\equiv 2\pmod 4\),所以一定有\((x_1-x_2)^2+(y_1-y_2)^2\equiv 0 \pmod 4\iff x_1\equiv x_2\pmod 2 \and y_1\equiv y_2\pmod 2\)

      然后把有边相连的点看成一组,我们只需要证明每组都是二分图。这个东西只需要将所有的坐标都除以二向下取整,就转化成了范围更小的子问题。

然后你现在有两个 \(D\),每个 \(D\) 会把图划分成两部分,也就是说,我们会将原图分成至多四个部分,找最大的那个部分输出即可。

/*---Author:HenryHuang---*/
/*---Never Settle---*/
#include<bits/stdc++.h>
using namespace std;
int siz,d1,d2;
int vis[1010][1010];
void solve(int x){
int tim=0;
while(x%4==0) x/=4,++tim;
if(x&1){
for(int i=0;i<siz*2;++i)
for(int j=0;j<siz*2;++j)
if(((i>>tim)+(j>>tim))&1) vis[i][j]=1;
}
else{
for(int i=0;i<siz*2;++i)
for(int j=0;j<siz*2;++j)
if(((i>>tim))&1) vis[i][j]=1;
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>siz>>d1>>d2;solve(d1),solve(d2);
int num=0;
for(int i=0;i<siz*2;++i)
for(int j=0;j<siz*2;++j){
if(!vis[i][j]) cout<<i<<' '<<j<<'\n',++num;
if(num==siz*siz) return 0;
} return 0;
}

最新文章

  1. KMP匹配算法
  2. 利用Google Speech API实现Speech To Text
  3. 使用BBCP来提升跨互联网的数据传输速度
  4. js 返回并刷新
  5. L1 - 运行机制
  6. C#排序算法的比较
  7. selenium2.0 处理各种窗口问题解决方法
  8. [置顶] Win8.1慎用360优化,可能导致安装驱动出现数据无效的问题。附解决方法
  9. [Java] HttpClient有个古怪的stalecheck选项
  10. CentOs7 systemd添加自定义系统服务
  11. Android项目实战(一): SpannableString与SpannableStringBuilder(转)
  12. 转发: windows如何管理内存
  13. Python面向对象1:类与对象
  14. 腾讯云部署golang flow流程,vue.js+nginx+mysql+node.js
  15. PC_android通信之传输图片并显示在手机端【转】
  16. 设置PhoenixOS进入图形界面
  17. 再遇ibatisNet
  18. Code Signal_练习题_stringsRearrangement
  19. MySQL几点重要的性能指标计算和优化
  20. Hadoop基础-Idea打包详解之手动添加依赖(SequenceFile的压缩编解码器案例)

热门文章

  1. C#解决WebClient不能下载https网页内容
  2. wangEditor 轻量级富文本框编辑器使用方法
  3. 小伙伴们在催更Spring系列,于是我写下了这篇注解汇总!!
  4. 并发王者课-铂金1:探本溯源-为何说Lock接口是Java中锁的基础
  5. ABAP SORT排序注意点
  6. 【NX二次开发】 获取体的面 UF_MODL_ask_body_faces
  7. python学习笔记04-了解操作符与条件分支
  8. noip模拟6[辣鸡&#183;模板&#183;大佬&#183;宝藏]
  9. 【数论】8.30题解-prime素数密度 洛谷p1835
  10. 【Javascript + Vue】实现随机生成迷宫图片