Good Bye 2019E(点坐标缩小一半以区分奇偶性)
设某个点的坐标为(x,y),根据坐标奇偶性公可分为四类,0表示偶数,1表示奇数,(0,0),(0,1),(1,0),(1,1)。
如果所有点的坐标都属于一类,那么它们之间的距离都是4的倍数,无法分辨。
此时将它们的坐标缩小一半,直至区分出奇偶性。
只要有至少一个点的坐标和其他点不在一类里,则可以分为两类。
假设同时存在坐标和为奇数以及坐标和为偶数的点,那么以坐标和为奇数或偶数为标准划分,则两类点在同类中的距离均为4的倍数,而与不同类点的距离是奇数,显然不等,故可行。
如果不能满足上述条件,还可以假设同时存在(0,0)和(1,1)或者同时存在(0,1)和(1,0)的点,那么以横坐标是否为偶数进行划分,则两类点在同类中的距离均为4的倍数,而与不同类点的距离为4的倍数+2(两个奇数相加必定和为2,剩余部分为两个偶数的平方必定为4的倍数),显然距离不等,故可行。
所以关键在于将所有的点都通过缩小的方式把它们分为至少2类。
如果坐标很小的情况下,除以2会将其奇偶性抹去,所以可以先把点的坐标加上初始最大值1e6。
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio();
cin.tie(NULL);
cout.tie(NULL);
int n;
cin>>n;
vector<pair<int, int>> p(n);
for (int i = ; i<n; i++) {cin>>p[i].first>>p[i].second; p[i].first+=1e6; p[i].second+=1e6;}
while (true){
vector<vector<int>> cnt(, vector<int>());
for (int i = ; i<n; i++) cnt[p[i].first%][p[i].second%]++;
if (cnt[][]+cnt[][]> && cnt[][]+cnt[][]>){
vector<int> A;
for (int i = ; i<n; i++) if ((p[i].first + p[i].second)%==) A.push_back(i);
cout<<A.size()<<endl;
for (auto it: A) cout<<it+<<' ';
return ;
}
if (cnt[][]+cnt[][]> && cnt[][]+cnt[][]>){
vector<int> A;
for (int i = ; i<n; i++) if (p[i].first%==) A.push_back(i);
cout<<A.size()<<endl;
for (auto it: A) cout<<it+<<' ';
return ;
}
int x, y;
for (int i = ; i<; i++)
for (int j = ; j<; j++) if (cnt[i][j]>) {x = i; y = j;}
for (int i = ; i<n; i++) {p[i].first = (p[i].first - x)/; p[i].second = (p[i].second - y)/;}
}
}
#define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
int a[],b[];
int ans[];
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n;
cin>>n;
for(int i=;i<=n;++i)
cin>>a[i]>>b[i];
int cnt=;
while(cnt==||cnt==n){
cnt=;
for(int i=;i<=n;++i){
if((a[i]+b[i])&)
ans[++cnt]=i;
int x=a[i],y=b[i];
a[i]=(x+y)>>;
b[i]=(x-y)>>;
}
}
cout<<cnt<<"\n";
for(int i=;i<=cnt;++i)
cout<<ans[i]<<" "; return ;
}
Good Bye 2019E(点坐标缩小一半以区分奇偶性)的更多相关文章
- 当鼠标移入div上时,div的背景色在4s之内渐变为灰色,同时在5s之内顺时针旋转45度,且尺寸缩小一半;当鼠标移走时,再渐变恢复初始样式
<style> #d1{ width:200px; height:200px; border:1px solid #000; transition:background 4s linear ...
- OpenGL中平移、旋转、缩放矩阵堆栈操作
在OpenGL中,图元的几何变换均为线性变换,通过矩阵变换实现.OpenGL中的坐标用齐次坐标表示,即(x,y,z)表示成(x',y',z',h),其中x=x'/h; y=y'/h; z=z'/h. ...
- 【短道速滑一】OpenCV中cvResize函数使用双线性插值缩小图像到长宽大小一半时速度飞快(比最近邻还快)之异象解析和自我实现。
今天,一个朋友想使用我的SSE优化Demo里的双线性插值算法,他已经在项目里使用了OpenCV,因此,我就建议他直接使用OpenCV,朋友的程序非常注意效率和实时性(因为是处理视频),因此希望我能测试 ...
- 在 .NET Core 下使用 SixLabors.ImageSharp 操作图片文件(放大、缩小、裁剪、加水印等等)的几个小示例
1. 基础 1.1 将图片的宽度和高度缩小一半 直接贴代码了: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup ...
- 获取ArcMap窗口句柄,通过WinAPI获取工作空间中点击要素的系统桌面坐标实现窗体跟随
这里用了个“桌面坐标”,是希望区分一下ArcGis的“屏幕坐标”(与之对应的还有一个“地理坐标”). 什么是“屏幕坐标”呢?使用ITool接口的OnMouseDown方法获取的“x,y”值即是,其原点 ...
- CSharpGL(27)讲讲清楚OpenGL坐标变换
CSharpGL(27)讲讲清楚OpenGL坐标变换 在理解OpenGL的坐标变换问题的路上,有好几个难点和易错点.且OpenGL秉持着程序难以调试.难点互相纠缠的特色,更让人迷惑.本文依序整理出关于 ...
- zz Must read
http://www.opengpu.org/forum.php?mod=viewthread&tid=965&extra=page%3D1 游戏引擎剖析(Game Engine An ...
- bzoj2289: 【POJ Challenge】圆,圆,圆
Description 1tthinking随便地画了一些圆. ftiasch认为这些圆有交集(面积非零)的可能性不大.因为他实在画了太多圆,所以你被请来判断是否存在交集. Input 第1行,一个整 ...
- LK光流算法:提高计算精度和增加搜索范围
LK光流算法:提高计算精度和增加搜索范围 关于LK算法的基本理论,见:http://www.cnblogs.com/dzyBK/p/4960630.html 这里主要阐述如何提高LK算法的计算精度和在 ...
随机推荐
- 【分享】一款特别轻量的gif生成工具
github链接:https://github.com/NickeManarin/ScreenToGif/releases/tag/2.19.3 超级好用!支持多种方式(摄像头也可√)录制gif
- PP: Neural tensor factorization
relational data. Neural collaborative filtering and recurrent recommender systems have been successf ...
- 使用Image Sharp 对二维码图片中间加入logo图片
1.在NuGet包源加入Image Sharp包源 2.在需要用到Image Sharp的项目中安装以下的插件 3.调用图片上绘制图片的方法
- 温故知新的错题训练:Coin game
传送门:http://192.168.173.163/JudgeOnline/problem.php?cid=1244&pid=1 输赢规则:无法再放下硬币的人就输. 博弈论的基本假定:他俩都 ...
- C语言 删除排序链表中的重复元素
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2输出: 1->2示例 2: 输入: 1->1->2->3-> ...
- numpy 生成数组
可以看这个博客 https://www.cnblogs.com/td15980891505/p/6082858.html import numpy as np 建立数组并初始化数组 np.zeros( ...
- numpy 中array 和ndrray的区别联系
numpy.array() 标明array只是一个方法 ndarray 是类名,是一个实例. a=numpy.array(b) #这是把变量b转换为数组a,这里array()是个方法,a的类型 ...
- EntityFramework之原始查询及性能优化
之前做海信项目,数据量自交大,为了提高查询效率用的 https://www.cnblogs.com/CreateMyself/p/4746258.html
- 转载:TDM协议
转自http://www.wangdali.net/i2s/ 1. PCM简介 PCM (Pulse Code Modulation) 是通过等时间隔(即采样率时钟周期)采样将模拟信号数字化的方法.图 ...
- s 贪心
区间问题: 区间选点问题 右端点排序,now标记点. 数轴上有N个闭区间[Ai, Bi].取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个). 输入 第1行:一个整数N(1 ...