JNUOJ 1187 - 哨兵
64-bit integer IO format: %lld Java class name: Main
木衫同学和凌小小都是军队的指挥官,他们共同管理着一队哨兵,每个哨兵都有一个位置(x,y)。但是木衫同学和凌小小计算距离的方法不一样,木衫同学计算第i个人和第j个人的距离利用以下公式 |xi - xj| + |yi - yj|,而凌小小计算时利用以下公式sqrt( (xi-xj)^2+(yi-yj)^2 )。现在问有多少组哨兵,他们之间的距离运用两种公式计算出来的结果是一样的。
Input
第一行输入一个整数T,代表有T组数据
每组数据第一行输入n(1 ≤ n ≤ 200000),代表哨兵的个数。
下面的n行,每行有两个整数,代表当前哨兵的坐标,(|xi|, |yi| ≤ 10^9)。
Output
每组数据输出一行,这一行只有一个整数,即符合条件的哨兵的组数。
Sample Input
2
3
1 1
7 5
1 5
6
0 0
0 1
0 2
-1 1
0 1
1 1
Sample Output
2
11
单纯暴力当然是要超时的……其实满足|xi - xj| + |yi - yj| = sqrt( (xi-xj)^2+(yi-yj)^2 )的两个点,只能是在同一条水平线或者同一条竖直线上 所以可以把不用计算两个距离,而是通过判断是否在同一条水平线或者同一条竖直线上来判断是否满足|xi - xj| + |yi - yj| = sqrt( (xi-xj)^2+(yi-yj)^2 )
#include<cstdio>
#include<cmath>
#include<cstdlib>
long long ans;
int n;
struct type{
double x,y;
}p[+];
bool check(type a,type b)
{
if(a.x == b.x || a.y == b.y) return true;
return false;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%lf%lf",&p[i].x,&p[i].y);
ans=;
for(int i=;i<n;i++)
{
for(int j=i+;j<=n;j++)
{
if(check(p[i],p[j])) ans++;
}
}
printf("%lld\n",ans);
}
}
这大概要耗时4秒左右。
所以可以考虑把用map把出现过的水平线(y=k的k作为key值)或者竖直线记录下来(x=k的k作为key值),然后把出现过的两个哨兵在相同的点上的情况也记录下来,
这样,每输入一个哨兵的坐标,ans+= “与他在同一条水平线上的人” + “与他在同一条竖直线上的人” - “与他在同一个坐标上的人(因为这样的人重复算了两次)”
#include<cstdio>
#include<map>
using namespace std;
typedef long long ll;
pair<ll,ll> now;
map<ll,ll> a,b;
map<pair<ll,ll>,ll> same;
int n;
ll ans,x,y;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
a.clear();b.clear();same.clear();
ans=;
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d%d",&x,&y);
ans=ans+a[x]+b[y]-same[make_pair(x,y)];
a[x]++;
b[y]++;
same[make_pair(x,y)]++;
}
printf("%d\n",ans);
}
}
这样耗时大概是1秒左右。
JNUOJ 1187 - 哨兵的更多相关文章
- 深入浅出Redis-redis哨兵集群
1.Sentinel 哨兵 Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所 ...
- StackExchange.Redis客户端读写主从配置,以及哨兵配置。
今天简单分享一下StackExchange.Redis客户端中配置主从分离以及哨兵的配置. 关于哨兵如果有不了解的朋友,可以看我之前的一篇分享,当然主从复制文章也可以找到.http://www.cnb ...
- Redis高可用集群方案——哨兵
本篇文章版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文系列地址http://www.cnblogs.com/tdws/tag/NoSql/ 本人之前有篇文章,讲到了redis主从复制,读写分 ...
- jedis支持哨兵主从配置role为slave
jedis功能强大,但是不能像nodejs一样指定从slave中读数据,使数据量读写量较大时读写分离,减少redis压力. 我们可以利用jedis中的方法封装一个类似于此的方法. github地址: ...
- Redis 哨兵模式实现主从故障互切换
200 ? "200px" : this.width)!important;} --> 介绍 Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 S ...
- redis哨兵配置
redis哨兵配置主从 redis哨兵的启动和redis实例的启动没有关系.所以可以在任何机器上启动redis哨兵.至少要保证有两个哨兵在运行,要不然宕机后哨兵会找不到主节点. 配置步骤: 1.在 ...
- Redis设计与实现-主从、哨兵与集群
主从 从机使用slaveof 命令来复制主机的缓存数据,包括同步sync与命令传播两个操作: 从机同步sync命令给主机,主机收到后执行需要耗费大量cpu.内存和磁盘IO资源的bgsave命令来生成r ...
- redis哨兵配置主从
redis哨兵的启动和redis实例的启动没有关系.所以可以在任何机器上启动redis哨兵.至少要保证有两个哨兵在运行,要不然宕机后哨兵会找不到主节点. 配置步骤: 1.在redis的配置文件中添加鉴 ...
- Redis Sentinel哨兵集群
Redis Sentinel(哨兵集群)是一种高可用的redis部署方案.在集群中的redis-master服务挂掉时,无需人为干预,即可通过哨兵集群的自我调整,实现redis服务的持续可用. 哨兵集 ...
随机推荐
- SpringMVC由浅入深day02_9RESTful支持
9 RESTful支持 9.1 什么是RESTful RESTful架构,就是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用. RESTful( ...
- [AX2012]代码更改默认财务维度
在前文(http://www.cnblogs.com/duanshuiliu/p/3243048.html)最后演示了如何使用代码更改默认财务维度,那段代码模拟了创建各数据表记录的过程,实际上AX提供 ...
- 一张图了解SSH端口转发
ssh和端口转发什么的,我就不想废话了,主要是ssh的命令格式真心不太好理解.网上也搜过相关文章,参差不齐.其实自己也理解怎么用,但我自己也表达不好.这几日无意碰到篇好文章,有图有真相,清楚的很,还有 ...
- pojo与DTO的区别
ational Mapping(对象关系映射)的缩写.通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据.在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO. ...
- Linux centos 下 eclipse 打开文件时关闭
原文地址:http://processors.wiki.ti.com/index.php/Linux_Host_Support#cairo-misc.c:380:_cairo_operator_bou ...
- 微信公众号access_token的获取与存储
如果是一个用户触发,那么只要将access_token放在数据库,文件,nosql就行,取时判断时间是否过期,过期重新去微信获取再放入. 如果是很多用户,多进程并发,特别是分布式那种架构呢?进程A判断 ...
- App store最新审核标准公布
本文转载至 http://blog.csdn.net/shuidonglCH/article/details/47083623 导读:苹果近日更新了App Store审核指南的相关章节,对此前版本进行 ...
- PL/SQL Developer的安装以及与64位Oracle Database进行连接
本文转载自budongs 一.下载 官网安装包(1106版本)下载链接: plsqldev1106.exe 官网中文语言包(110版本) 下载链接: chinese.exe [中文语言包的使用方法为: ...
- 树莓派上 安装并 运行opencv
1.先安装依赖项 OpenCV 2.2以后版本需要使用Cmake生成makefile文件,因此需要先安装cmake. sudo apt-get install build-essential sudo ...
- 【转载】C#调用C++ DLL
using System; using System.Collections.Generic; using System.Linq; using System.Text; //1. 打开项目“Tzb” ...