当前位置:网站首页>2022 Hangzhou Electric Multi-School 1004 Ball
2022 Hangzhou Electric Multi-School 1004 Ball
2022-08-05 00:22:00 【Rain Sure】
题目链接
题目大意
Topic given our two-dimensional plane n n n个点,Horizontal ordinate are no more than 100000 100000 100000,Ask we choose three points,Three points constitute three sides of the perimeter of the median is the number of primes scheme is how much?
题解
Direct enumeration three points,势必会TLE;So we consider all edge build up,时间复杂度 O ( n 2 ) O(n^2) O(n2),And then according to the edge of the smallest size,Then, in turn, enumerated each edge,If the current edge is prime,Assuming that the current edge two endpoints for a a a 和 b b b,We need to know the connection a a aThe number of the edge is smaller than the current edge weights in the,连接 b b bThe number of edge is bigger than the current edge weights;Similarly, in turn, requires a.Direct enumeration not goozyet,我们考虑使用 b i t s e t bitset bitset进行优化, p [ i ] p[i] p[i]What are said to i i iPoint distance less than or equal to the current edge,In the process of enumeration and maintenance can be.最终时间复杂度 O ( n 2 l o g ( n 2 ) ) O(n^2 log(n^2)) O(n2log(n2)).
代码
#include<iostream>
#include<cstring>
#include<bitset>
#include<algorithm>
using namespace std;
#define int long long
const int maxn = 2010, M = 200010;
#define x first
#define y second
typedef pair<int,int> PII;
PII a[maxn];
bool st[M];
int primes[M], cnt;
typedef struct node
{
int a, b, c;
bool operator < (const struct node &w) const {
return c < w.c;
}
}Node;
Node edges[maxn * maxn];
bitset<maxn> p[maxn];
int n, m;
void init(int n)
{
for(int i = 2; i <= n; i ++){
if(!st[i]) primes[cnt ++] = i;
for(int j = 0; primes[j] <= n / i; j ++){
st[primes[j] * i] = true;
if(i % primes[j] == 0) break;
}
}
}
int get_dist(PII a, PII b)
{
return abs(a.x - b.x) + abs(a.y - b.y);
}
signed main()
{
init(200000);
st[1] = true;
int t; cin >> t;
while(t --){
for(int i = 0; i < maxn; i ++) p[i].reset();
cin >> n >> m;
for(int i = 1; i <= n; i ++) cin >> a[i].x >> a[i].y;
int k = 0;
for(int i = 1; i <= n; i ++){
for(int j = i + 1; j <= n; j ++){
edges[k ++] = {
i, j, get_dist(a[i], a[j])};
}
}
int res = 0;
sort(edges, edges + k);
for(int i = 0; i < k; i ++){
int a = edges[i].a, b = edges[i].b, c = edges[i].c;
if(!st[c]) res += (p[a] ^ p[b]).count();
p[a][b] = 1, p[b][a] = 1;
}
cout << res << endl;
}
return 0;
}
边栏推荐
猜你喜欢

测试经理要不要做测试执行?

KT148A voice chip ic working principle and internal architecture description of the chip

Privacy Computing Overview

电赛必备技能___定时ADC+DMA+串口通信

标识符、关键字、常量 和变量(C语言)

【云原生--Kubernetes】Pod控制器

《WEB安全渗透测试》(28)Burp Collaborator-dnslog外带技术

leetcode: 266. All Palindromic Permutations

论文解读( AF-GCL)《Augmentation-Free Graph Contrastive Learning with Performance Guarantee》

国内网站用香港服务器会被封吗?
随机推荐
矩阵数学原理
软件测试面试题:软件验收测试的合格通过准则?
Cloud native - Kubernetes 】 【 scheduling constraints
SQL association table update
看图识字,DELL SC4020 / SCv2000 控制器更换过程
ansible学习笔记分享-含剧本示例
what?测试/开发程序员要被淘汰了?年龄40被砍到了32?一瞬间,有点缓不过神来......
Mysql_12 多表查询
在线中文姓名生成工具推荐
【Valentine's Day special effects】--Canvas realizes full screen love
D - I Hate Non-integer Number (选数的计数dp
Couple Holding Hands [Greedy & Abstract]
软件测试面试题:LoadRunner 分为哪三个模块?
倒计时1天!8月2日—4日与你聊聊开源与就业那些事!
数据类型-整型(C语言)
Modelers experience sharing: model study method
10 个关于 Promise 和 setTimeout 知识的面试题,通过图解一次说透彻
软件测试面试题:软件都有多少种分类?
LeetCode Hot 100
子连接中的参数传递