18.12.5 发现他,抓住他(并查集)&正方形(哈希表)

发现他,抓住他(10分)

题目内容:

一个城市中有两个犯罪团伙A和B,你需要帮助警察判断任意两起案件是否是同一个犯罪团伙所为,警察所获得的信息是有限的。假设现在有N起案件(N<=100000),编号为1到N,每起案件由团伙A或团伙B所为。你将按时间顺序获得M条信息(M<=100000),这些信息分为两类:

1. D [a] [b]

其中[a]和[b]表示两起案件的编号,这条信息表明它们属于不同的团伙所为

2. A [a] [b]

其中[a]和[b]表示两起案件的编号,这条信息需要你回答[a]和[b]是否是同一个团伙所为

注意你获得信息的时间是有先后顺序的,在回答的时候只能根据已经接收到的信息做出判断。

 

输入格式:

第一行是测试数据的数量T(1<=T<=20)。
每组测试数据的第一行包括两个数N和M,分别表示案件的数量和信息的数量,其后M行表示按时间顺序收到的M条信息。

 

输出格式:

对于每条需要回答的信息,你需要输出一行答案。如果是同一个团伙所为,回答"In the same gang.",如果不是,回答"In different gangs.",如果不确定,回答”Not sure yet."。

 

输入样例:

1
5 5
A 1 2
D 1 2
A 1 2
D 2 4
A 1 4

 

输出样例:

Not sure yet.
In different gangs.
In the same gang.
 1 #include <iostream>
 2 #include <string.h>
 3 #include <algorithm>
 4 #include <stack>
 5 #include <string>
 6 #include <math.h>
 7 #include <queue>
 8 #include <stdio.h>
 9 #include <string.h>
10 #include <vector>
11 #include <fstream>
12 #define maxn 100005
13 #define inf 999999
14 
15 using namespace std;
16 int relation[maxn],set[maxn];
17 int n, m;
18 
19 void find(int x) {
20     if (x == set[x])return;
21     int father = set[x];
22     find(father);
23     relation[x] = (relation[father] + relation[x]) % 2;
24     set[x] = set[father];
25 }
26 
27 void Union(int x, int y) {
28     find(x), find(y);
29     int fx = set[x], fy = set[y];
30     set[fx] = fy;
31     relation[fx] = (1 + relation[y] + relation[x]) % 2;
32 }
33 
34 void init() {
35     int kase;
36     scanf("%d", &kase);
37     while (kase--) {
38         scanf("%d%d", &n, &m);
39         for (int i = 1; i <= n; i++) {
40             set[i] = i;
41             relation[i] = 0;
42         }
43         while (m--) {
44             char cmd;
45             int x, y;
46             scanf("\n%c", &cmd);
47             if (cmd == 'D') {
48                 scanf("%d%d", &x, &y);
49                 Union(y, x);
50             }
51             else if (cmd == 'A') {
52                 scanf("%d%d", &x, &y);
53                 find(x), find(y);
54                 if (set[x] != set[y])
55                     printf("Not sure yet.\n");
56                 else if (relation[x] == relation[y])
57                     printf("In the same gang.\n");
58                 else
59                     printf("In different gangs.\n");
60             }
61         }
62     }
63 }
64 
65 int main()
66 {
67     init();
68     return 0;
69 }
View Code

突然sssx……?我不是很明白这个用检索怎么做

正方形(10分)

题目内容:

给定直角坐标系中的若干整点,请寻找可以由这些点组成的正方形,并统计它们的个数。

 

输入格式:

包括多组数据,每组数据的第一行是整点的个数n(1<=n<=1000),其后n行每行由两个整数组成,表示一个点的x、y坐标。输入保证一组数据中不会出现相同的点,且坐标的绝对值小于等于20000。输入以一组n=0的数据结尾。

 

输出格式:

对于每组输入数据,输出一个数,表示这组数据中的点可以组成的正方形的数量。

 

输入样例:

4
1 0
0 1
1 1
0 0
9
0 0
1 0
2 0
0 2
1 2
2 2
0 1
1 1
2 1
4
-2 5
3 7
0 0
5 2
0

 

输出样例:

1
6
1
 1 #include <iostream>
 2 #include <string.h>
 3 #include <algorithm>
 4 #include <stack>
 5 #include <string>
 6 #include <math.h>
 7 #include <queue>
 8 #include <stdio.h>
 9 #include <string.h>
10 #include <vector>
11 #include <fstream>
12 #define maxn 100005
13 #define inf 999999
14 
15 using namespace std;
16 int n;
17 
18 struct point {
19     int x, y;
20     int count;
21     point() {
22         x = 0, y = 0, count = 0;
23     }
24 }Hash[1100], all[1100];
25 
26 int p2hash(point x) {
27     return (x.x*x.x + x.y*x.y) % 1003;
28 }
29 
30 void put(point a) {
31     int i = p2hash(a);
32     while (Hash[i].count != 0) {
33         i++;
34     }
35     Hash[i].x = a.x, Hash[i].y = a.y;
36     Hash[i].count++;
37 }
38 
39 bool find(point a) {
40     int i = p2hash(a);
41     while (Hash[i].count != 0) {
42         if (Hash[i].x == a.x&&Hash[i].y == a.y)
43             return true;
44         i++;
45     }
46     return false;
47 }
48 
49 void init() {
50     int ans = 0;
51     for (int i = 1; i <= n; i++) {
52         int x, y;
53         scanf("%d%d", &x, &y);
54         all[i].x = x, all[i].y = y;
55         put(all[i]);
56     }
57     for(int i=1;i<=n;i++)
58         for (int j = 1; j <= n; j++) {
59             if (i == j)continue;
60             point a1, a2;
61             int dx = all[j].x - all[i].x, dy = all[i].y - all[j].y;
62             a1.x = all[i].x + dy;
63             a1.y = all[i].y + dx;
64             a2.x = all[j].x + dy;
65             a2.y = all[j].y + dx;
66             if (find(a1) && find(a2))
67                 ans++;
68         }
69     printf("%d\n", ans/4);
70 }
71 
72 int main()
73 {
74     while(scanf("%d",&n)&&n)
75         init();
76     return 0;
77 }
View Code

两个点确定另外两个点,然后检索。

 

转载于:https://www.cnblogs.com/yalphait/p/10074025.html

种类并查集 发现抓住 tag[i] 表示 i 结点 与其父节点是否在同一个集合中(表示的是一种相对关系)GetFather时:压缩路径,同时更新tag[i]合并时:更新tag[father[i]]#include &amp;lt;stdio.h&amp;gt; #include &amp;lt;iostream&amp;gt; #include &amp;lt;stack&amp;gt; #include &amp;lt;string&amp;gt; #include &amp;lt;se... 阅读详情

相关推荐

Habitat-baselines v0.1.7防踩坑手把手带你跑通(全网唯一)

Habitat-baselines v0.1.7防踩坑手把手带你跑通(全网唯一)

shannanshouyin的博客 1241

3:发现它,抓住

总时间限制: 1000ms 内存限制: 65536kB 描述 一个城市中有两个犯罪团伙A和B,你需要帮助警察判断任意两起案件是否是同一个犯罪团伙所为,警察所获得的信息是有限的。假设现在有N起案件(N 1. D [a] [b] 其中[a]和[b]表示两起案件的编号,这条信息表明它们属于不同的团伙所为 2. A [a] [b] 其中[a]和[b]表示两起案件的编号,

复习。 3702

AE(自动曝光)调试策略:曝光曲线设计与过曝控制

自动曝光(AE, Auto Exposure)系统是图像质量控制链路中的核心模块之一,其性能直接决定了成像亮度是否稳定、细节是否完整、场景切换是否自然。在现代移动终端影像系统中,AE 不仅需要适应不同光照强度和复杂环境,还需兼顾人脸优先、HDR触发、视频帧率控制等多目标优化需求。本文基于高通 Snapdragon 和 MTK Dimensity 等主流平台的调试经验,系统梳理了 AE 模型设计原则、曝光曲线配置、测光策略选择与过曝抑制机制,并结合典型实战案例,提供可复制的工程落地路径。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 3028

Onenjudge 百炼 1703 ---- 发现它,抓住它 (并查集的应用)

发现它,抓住它 一个城市中有两个犯罪团伙A和B,你需要帮助警察判断任意两起案件是否是同一个犯罪团伙所为,警察所获得的信息是有限的。假设现在有N起案件(N<=100000),编号为1到N,每起案件由团伙A或团伙B所为。你将按时间顺序获得M条信息(M<=100000),这些信息分为两类: 1、 D [a] [b] 其中[a]和[b]表示两起案件的编号,这条信息表明它们属于不同的团伙所为2、A [a] [b]

pku_Coder的博客 6086

发现它,抓住

我们先来讲一下这道题的思路,我们输入之后,首先将1~N这N个数字插入到并查集中,然后如果输入的是‘D’,那么就unionSet进行合并(一个集合内的所有元素代表这些犯罪团伙都不是一个团伙),如果输入的是‘A’,那么进行find函数查找a和b的所在集合,我们就只需要判断他们的所在集合是否相同即可。 如果不相同,代表不确定,输出Not sure yet.,如果a和b的父节点是相同的(代表他们是否是同一个集合),如果相同,就输出In the same gang.,如果不是就输出In different

wo_ai_luo_的博客 1508

北京大学ACM-ICPC竞赛训练暑期课 / 练习 030:发现它,抓住

030:发现它,抓住它         查看      提交      统计      提问 总时间限制: 1000ms 内存限制: 65536kB 描述 一个城市中有两个犯罪团伙A和B,你需要帮助警察判断任意两起案件是否是同一个犯罪团伙所为,警察所获得的信息是有限的。假设现在有N起案件(N&lt;=100000),编号为1到N,每起案件由团伙A或团伙B所为。你将按时间顺序获得M条信息(M&lt;=100000),这些信息分为两类: D [a] [b] 其中[a]和[b]表示两起案件的编号,这条信息

Foolishman的博客 897

并查集(应用)

并查集的应用(补充) 并查集的基础操作与介绍请看上一篇博客并查集 北大POJ平台705题,“发现他,抓住他”。 描述 一个城市中有两个犯罪团伙A和B,你需要帮助警察判断任意两起案件是否是同一个犯罪团伙所为,警察所获得的信息是有限的。假设现在有N起案件(N&lt;=100000),编号为1到N,每起案件由团伙A或团伙B所为。你将按时间顺序获得M条信息(M&lt;=100000),这些信息分为两类: 1 、D[a][b] 其中[a]和[b]表示两起案件的编号,这条信息表明它们属于不同的团伙所为 2、

m0_48508203的博客 433

leetcode算法题总结

非递归写法用一个队列保存当前层的节点,遍历的时候注意提前记下当前层的节点个数,遍历的时候只处理当前层的节点,下一层的节点继续进入队列。代码量很小,有点像智力题,抓住关键点(既然是连续序列且求最大和,判断下要不要取前面的子序列和就行了)就很容易做出来。三数之和的升级版,还是考察队双指针的理解,同时也考察处理复杂业务代码的能力(业务逻辑比三数之和更复杂了)。一道动态规划的典型题目,代码量不大,既考察智力又考察动态规划,非常适合作为面试题目。动态规划、逻辑挺绕的。考察的是递归写法,以及对二维数组边界的判断。

xueping_wu的博客 1119

16届蓝桥杯14天省赛冲刺营 1期 答案 python(持续更新)

💥Python蓝桥杯算法模板💥

m0_73898498的博客 1064

生日提醒管家应用HarmonyOS ArkTS API 24利用函数式计算方法(getter 方法)实时派生筛选、统计、排序后的数据视图

在 HarmonyOS NEXT 正式商用的背景下,ArkTS 作为鸿蒙生态的官方应用开发语言,正在从传统的命令式 UI 开发范式向声明式 UI 范式全面迁移。ArkUI 框架以组件化、声明式、状态驱动为核心特征,要求开发者以"描述 UI 应该是什么样"而非"一步步操作 UI 怎么变"的思维方式构建界面。本文以一个名为"智能账单"的三标签页记账应用为切入点,逐层拆解其数据模型设计、@Builder 组件复用策略、@State 状态管理机制、条件渲染导航模式,以及静态写死渲染与动态循环渲染之间的性能权衡,为

2401_86031952的博客 14

犯罪团伙 题解

【题目描述】警察抓到了 n 个罪犯,警察根据经验知道他们属于不同的犯罪团伙,却不能判断有多少个团伙,但通过警察的审讯,知道其中的一些罪犯之间相互认识,已知同一犯罪团伙的成员之间直接或间接认识。有可能一个犯罪团伙只有一个人。请你根据已知罪犯之间的关系,确定犯罪团伙的数量。已知罪犯的编号从 1 至 n。【输入】第一行:n(&lt;=1000,罪犯数量),第二行:m(&...

weixin_33901843的博客 755

发现它,抓住它--并查集,偏序关系

POJ 1703 总时间限制: 1000ms 内存限制: 65536kB 描述 一个城市中有两个犯罪团伙A和B,你需要帮助警察判断任意两起案件是否是同一个犯罪团伙所为,警察所获得的信息是有限的。假设现在有N起案件(N<=100000),编号为1到N,每起案件由团伙A或团伙B所为。你将按时间顺序获得M条信息(M<=100000),这些信息分为两类: 1. D [a] [b] 其中[a]和[

melanieecd的博客 858

犯罪团伙

1 、犯罪团伙gang.cpp警察抓到了 n 个罪犯,警察根据经验知道他们属于不同的犯罪团伙,却不能判断有多少个团伙,但通过警察的审讯,知道其中的一些罪犯之间相互认识,已知同一犯罪团伙的成员之间直接或间接认识。有可能一个犯罪团伙只有一个人。请你根据已知罪犯之间的关系,确定犯罪团伙的数量。已知罪犯的编号从 1 至 至 n 。输入:第一行:n (&lt;=1000, 罪犯数量) ) ,第二行:m (...

weixin_30784141的博客 286

看过讲的最精辟的NAT,不懂的人马上也能懂!

看过讲的最精辟的NAT,不懂的人马上也能懂! 看过很多NAT的相关知识,也用过不少,最近又一次接触了NAT.回味了一下相关NAT的知识,发现还是这篇关于NAT的文章,讲解最为人性,精辟,通俗易懂!现在进入正文nat翻译成中文就是网络地址转换,顾名思义也就是把一个IP地址转换成另一个IP地址,有人问为什么转换,我们就来看看。 数据包中的IP头部包含源IP地址,也就...

weixin_34408717的博客 195

poj 1703 Find them, Catch them

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

weixin_33800593的博客 259

【codevs】2597 团伙

题目描述 Description 1920年的芝加哥,出现了一群强盗。如果两个强盗遇上了,那么他们要么是朋友,要么是敌人。而且有一点是肯定的,就是: 我朋友的朋友是我的朋友; 我敌人的敌人也是我的朋友。  两个强盗是同一团伙的条件是当且仅当他们是朋友。现在给你一些关于强盗们的信息,问你最多有多少个强盗团伙。 输入描述 Input Description

yonionz的专栏 999

基于MPS MP8009 的 802.3 af at PoE PD AP Router方案-电路方案

POE供电模块是一种集成电源模块,在借助一根线缆为终端传输数据的同时,还能为此类设备提供直流供电,PoE技术能在确保现有结构化布线安全的情况下保证现有网络的正常运作,不用另外架设电源线,最大限度地降低成本。一般在稳定的乙太网布线基础架构下,无法轻易更换设备,因为会造成较大成本的增加,为了优化以上情况,POE供电模块技术应运而生,其主要作用就是在以往架构上不用做任何改动的情况下,还能为IP电话机、网络摄像机、无线区域网接入点AP等设备传输数据信号时提供直流电流。随著网络布局的复杂化,技术门槛也是越来越高,POE供电模块在网络监控的快速发展中不断崛起,伴随著其使用场景越来越多样化,POE供电模块也被越来越多的用户关注。方案规格MP8009是一款基于PoE供电的全集成PD界面电源芯片. 将乙太网提供的48V电源转换为12V或5V输出(25.5W)对后端系统供电,该芯片支援PoE协定(IEEE802.3af/at),无需外加协定芯片,可用Flyback、Forward架构设计,在Flyback架构下可用一次侧回授,可以较对手省下光偶合器、稳压器等二次侧回授所需的零件和空间,为 IEEE802.3af/at标准的各类工业、电信和影像应用提供了一款的PoE供电方案。MP8009是集成的IEEE 802.3af / at,符合PoE标准的受电设备(PD)电源供电转换器,它包括PD接口和高效Flyback/Forward控制器,PD接口具有IEEE的所有功能802.3af / at ,120mA浪涌电流限制,840mA工作电流限制以及100V热插拔MOSFET。MP8009具有一次侧调节(PSR)的Flyback、效率高的二次侧调节(SSR)Forward设计弹性架构.MP8009可以支援到25.5W输出,符合802.3 af/at规范,MP8007支援13W输出.MP8009支援Flyback/Forward双架构,MP8007支援Flyback.MP8009比MP8007增加Active-Clamp、Frequency Dither、Keep frequency above 30kHz to avoid audio noise功能方案来源于大大通

上一篇: 18.11.20 图作业三则(Kruskal\Floyd\朱刘算法)
下一篇: 【复习笔记】数据结构-外排序
dhc65376
博客等级 码龄12年 13粉丝 106原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值