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服务的持续可用. 哨兵集 ...
随机推荐
- OC中Runtime浅析
近期了解了一下OC的Runtime,真的是OC中非常强大的一个机制,看起来比較底层,但事实上能够有非常多活用的方式. 什么是Runtime 我们尽管是用Objective-C写的代码,事实上在运行过程 ...
- mongodb 初学 目录
mongodb 初学 索引 啦啦啦 MongoDB 教程 NoSQL 简介 MongoDB 简介 Windows 平台安装 MongoDB Linux平台安装MongoDB mongodb 在 Ubu ...
- linux 端口占用情况
1,查看8010端口是否被占用 [root@cloud ~]# netstat -an|grep 8010 tcp 0 0 0.0.0.0:8010 0.0.0.0:* LISTEN 2,查看8010 ...
- WopiServerTutorial
Program.cs using System; using System.Collections.Generic; using System.IO; using System.Linq; using ...
- iOS开发-修改UITableViewCell中image和title的位置和大小
最近在开发中遇到需要Cell中imageView和textLable位置和大小的情况,设计希望得到的结果如下图所示: 而TableViewCell默认样式,image是靠紧左边的,并且image和ti ...
- Unity弹出MessageBox
[DllImport("User32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = Char ...
- vue再次入手(数据传递②)
接上篇~ 5.最后一种,互通:无所谓父组件或者是子组件,而是随时随地都能调用到数据的一种方法.便是利用vuex来管理数据,官网描述: Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它 ...
- C++ template —— 模板中的名称(三)
第9章 模板中的名称------------------------------------------------------------------------------------------ ...
- 操作系统定期定时执行python脚本
1. Windows 控制面板 --> 管理工具 -->任务计划程序 --> 创建任务 接下来就是设置执行的时机以及脚本路径等 1>>常规 设置任务名称描述,以及是否执行 ...
- 【LeetCode OJ】Swap Nodes in Pairs
题目:Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2 ...