题意:

求欧几里得距离与曼哈顿距离相等的组数。

分析:

化简后得到xi=xj||yi=yj,即为求x相等 + y相等 - x与y均相等。

代码:

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1000000 + 5;
typedef pair<long long , long long>pii;
pii p[maxn];
bool cmp(pii a, pii b)
{
return a.first < b.first||(a.first == b.first && a.second < b.second);
}
bool cmp1(pii a, pii b)
{
return a.second < b.second||(a.second == b.second &&a.first < b.first);
}
int main (void)
{
int n;cin>>n;
for(int i = 0; i < n; i++){
cin>>p[i].first>>p[i].second;
}
long long resx = 0, resy = 0;
long long cnt = 0;
sort(p, p + n, cmp);
for(int i = 1; i < n; i++){
if(p[i].first == p[i - 1].first)
cnt++;
if(i == n-1||p[i].first != p[i - 1].first){
resx += cnt * (cnt + 1)/2;
cnt = 0;
}
}
sort(p, p + n, cmp1);
cnt = 0;
long long aa = 0, both = 0;
for(int i = 1; i < n; i++){
if(p[i].second == p[i - 1].second){
cnt++;
if(p[i].first == p[i-1].first)
aa++;
if(p[i].first != p[i-1].first){
both += aa * (aa + 1)/2;
aa = 0;
}
}
if(i == n-1||p[i].second != p[i - 1].second){
resy += cnt * (cnt + 1)/2;
cnt = 0;
both += aa * (aa + 1)/2;
aa = 0;
}
}
cout<<resx + resy - both<<endl;
}

也可以用map做,这样可以直接记录x和y均相等的个数。

#include <iostream>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;
const int maxn = 200005;
typedef pair<int, int> p;
typedef long long ll;
map<int, int>ma, mb;
map<p, int> mp;
int main (void)
{
int n;cin>>n;
int x, y;
for(int i = 0; i < n; i++){
cin>>x>>y;
ma[x] ++;
mb[y]++;
mp[p(x, y)]++;
}
long long resx = 0, resy = 0, both = 0;
map<int, int>::iterator i;
map<p, int>::iterator j;
for(i = ma.begin(); i != ma.end(); i++){
resx +=(ll) i->second * ( i->second- 1)/2;
}
for(i = mb.begin(); i!=mb.end();i++){
resy += (ll)i->second * ( i->second- 1)/2;
}
for(j = mp.begin(); j != mp.end(); j++){
both += (ll) j->second * ( j->second- 1)/2;
}
cout<<resx + resy - both<<endl;
return 0;
}

对于C++11,for(i = ma.begin(); i != ma.end(); i++)可以直接写成

for(auto x: ma) 

不明白第一种方法如果不分别保存resx,resy,both而是直接对res进行不停的加减,最后会runtime error……..

最新文章

  1. 锋利的jQuery-4--阻止事件冒泡和阻止默认行为
  2. Css杂谈
  3. Const和readonly这间的区别和相同处
  4. Android用户界面 UI组件--TextView及其子类(四) Chronometer计时器
  5. c++四则运算代码
  6. 中间件(Middleware)
  7. 使用EasyMock对Servlet进行简单的测试
  8. Python爬虫框架Scrapy安装使用步骤
  9. Java并发与同步
  10. weblogic修改jdk版本遇到的问题与解决方法
  11. 《Python 数据科学实践指南》读书笔记
  12. mac本webstrom破解
  13. mika的模板库
  14. [leetcode]170. Two Sum III - Data structure design两数之和III - 数据结构设计
  15. LoadRunner性能测试入门教程
  16. 在网站中使用Bing Translator插件翻译文章。
  17. python+win32+ie浏览器操作 TypeError: getElementById() takes exactly 1 argument (2 given)
  18. 前端调用接口报错看不到报错响应时 console.dir
  19. svn导入项目和部署方面的相关问题
  20. String.getBytes()未设置字符集导致打印的pdf乱码

热门文章

  1. AJPFX解析成员变量和局部变量
  2. AJPFX关于多态的应用
  3. SpringBoot_自定义配置属性
  4. 从java toBinaryString() 看计算机数值存储方式(原码、反码、补码)
  5. css3 transform + deviceorientation实现图片旋转效果
  6. git介绍与使用
  7. 如何安装sql server2005 windows 8
  8. UEFI启动 安装win8 win10 及windows server 2012 最简单的方法
  9. 玩转CPU运行曲线
  10. C#根據當前DataGridView查詢數據導出Excel