Codeforces 651C Watchmen【模拟】
2024-08-30 18:39:56
题意:
求欧几里得距离与曼哈顿距离相等的组数。
分析:
化简后得到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……..
最新文章
- 锋利的jQuery-4--阻止事件冒泡和阻止默认行为
- Css杂谈
- Const和readonly这间的区别和相同处
- Android用户界面 UI组件--TextView及其子类(四) Chronometer计时器
- c++四则运算代码
- 中间件(Middleware)
- 使用EasyMock对Servlet进行简单的测试
- Python爬虫框架Scrapy安装使用步骤
- Java并发与同步
- weblogic修改jdk版本遇到的问题与解决方法
- 《Python 数据科学实践指南》读书笔记
- mac本webstrom破解
- mika的模板库
- [leetcode]170. Two Sum III - Data structure design两数之和III - 数据结构设计
- LoadRunner性能测试入门教程
- 在网站中使用Bing Translator插件翻译文章。
- python+win32+ie浏览器操作 TypeError: getElementById() takes exactly 1 argument (2 given)
- 前端调用接口报错看不到报错响应时 console.dir
- svn导入项目和部署方面的相关问题
- String.getBytes()未设置字符集导致打印的pdf乱码