两点之间 这题有毒啊,不会做
https://biancheng.love/problem/640/index
一直re
不是并查集吗
#include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> #include <assert.h> #define IOS ios::sync_with_stdio(false) using namespace std; #define inf (0x3f3f3f3f) typedef long long int LL;#include <iostream> #include <sstream> #include <vector> #include <set> #include <map> #include <queue> #include <string> const int maxn = 1e6 + 20; const LL MOD = 10007; int n, m, q; string str[maxn]; int fa[maxn]; int Size[maxn]; int first[MOD + 20]; int num; void init(int tot) {for (int i = 0; i <= MOD; ++i) {fa[i] = i;Size[i] = 1;}memset(first, 0, sizeof first);num = 0; } struct node {LL val;int id;int u;int tonext; } e[maxn * 2]; void add(int x, int y) {++num;e[num].val = 1LL * x * 1000000 + y;assert(e[num].val >= 0);e[num].id = num;e[num].u = e[num].val % MOD;e[num].tonext = first[e[num].u];first[e[num].u] = num; } int tohash(int x, int y) {LL val = 1LL * x * 1000000 + y;int u = val % MOD;for (int i = first[u]; i; i = e[i].tonext) {if (e[i].val == val) return e[i].id;}while(1); // assert(false); } int tofind(int x) {if (fa[x] == x) return x;else return fa[x] = tofind(fa[x]); } void tomerge(int x, int y) {x = tofind(x);y = tofind(y);if (x != y) {fa[y] = x;Size[x] += Size[y];} } int tonext[4][2] = {{0, 1}, {1, 0}, {0, -1}, { -1, 0}}; struct data {int val, fa; } gg[12]; void work() {scanf("%d%d%d", &n, &m, &q);for (int i = 1; i <= n; ++i) {scanf("%s", str[i].c_str() + 1);}init(n * m);for (int i = 1; i <= n; ++i) {for (int j = 1; j <= m; ++j) {add(i, j);}}for (int i = 1; i <= n; ++i) {for (int j = 1; j <= m; ++j) {if (i - 1 >= 1 && str[i - 1][j] == str[i][j]) {int x = tofind(tohash(i, j));int y = tofind(tohash(i - 1, j));tomerge(x, y);}if (j - 1 >= 1 && str[i][j - 1] == str[i][j]) {int x = tofind(tohash(i, j - 1));int y = tofind(tohash(i, j));tomerge(x, y);}}}while (q--) {int x, y;scanf("%d%d", &x, &y);memset(gg, 0, sizeof gg);int ans = Size[tofind(tohash(x, y))];for (int i = 0; i < 4; ++i) {int tx = x + tonext[i][0];int ty = y + tonext[i][1];if (tx >= 1 && tx <= n && ty >= 1 && ty <= m) {int father = tofind(tohash(tx, ty));if (gg[str[tx][ty] - '0'].fa == father) continue;gg[str[tx][ty] - '0'].val += Size[father];gg[str[tx][ty] - '0'].fa = father;}}int id = str[x][y];for (int i = 0; i < 4; ++i) {int tx = x + tonext[i][0];int ty = y + tonext[i][1];if (tx >= 1 && tx <= n && ty >= 1 && ty <= m) { // int father = tofind(tohash(tx, ty));if (ans < gg[str[tx][ty] - '0'].val) {ans = gg[str[tx][ty] - '0'].val;id = str[tx][ty];} else if (ans == gg[str[tx][ty] - '0'].val) {if (id == str[x][y]) {id = str[tx][ty];}}}}printf("%d\n", ans + (id != str[x][y]));} }int main() { #ifdef localfreopen("data.txt", "r", stdin); // freopen("data.txt", "w", stdout); #endifint t;scanf("%d", &t);while (t--) work();return 0; }
View Code
转载于:https://www.cnblogs.com/liuweimingcprogram/p/6195680.html
两点之间 这题有毒啊,不会做相关推荐
- 如何求地球上两点之间的最短距离_高三数学这样复习“最高效”,稳稳120+!...
很多同学到了高三不知道怎样去复习,今天着重给大家说说应该如何复习高三数学! 第一步 调整心态,化解不良情绪的干扰 每到这个时候很多同学总会出现些或轻或重的紧张心理现象,严重者甚至失眠,从而干扰了复习的 ...
- 点线形系列1-计算两点之间的距离
分数 10 作者 蔡轲 单位 南昌航空大学 输入连个点的坐标,计算两点之间的距离 输入格式: 4个double类型的实数,两个点的x,y坐标,依次是x1.y1.x2.y2,两个点的坐标之间以空格分隔, ...
- 本关任务:编写一个Point类,有x、y两个属性。编写一个PointDemo类,并提供一个distance(Point p1,Point p2)方法用于计算两点之间的距离,实例化两个具体的Point对
#java编程基础 以后会时常更新java编程题,分享所遇之难,答疑解惑,共同努力. 本关任务:编写一个Point类,有x.y两个属性.编写一个PointDemo类,并提供一个distance(Poi ...
- joj 2737 狼与羊的故事 求任意两点之间的必经之路
村长要召开羊族大会,讨论羊族未来的发展,要求羊羊们到指定地点集合.小羊们收到通知后从家里出发到达指定地点.每个羊的家都是与其他羊的家连通的,可以互相访问. 比如说可以从1到3,同样也可以从3到1 .灰 ...
- 遍历寻找给定两点之间的所有路径
直接入题,参加2017年华为竞赛的时候,需要输出路径,当时设了源点和汇点,是单源单汇的寻路径,那么问题就归为寻找给定两点之间的所有路径问题 我们的老师一直教我们这些菜鸟们说,写程序一定要先在纸上写好考 ...
- php 计算两点时间距离,PHP计算地球上两点之间的距离(示例详解)
给定经度和纬度,求地球上两点之间的距离.首先我们需要了解该问题的解决思路,然后再用PHP代码来实现计算. 此问题可以用半正矢(haversine)公式求解: 大圆距离或正交距离是球面(或地球表面)上两 ...
- 通过gps给定的两个经纬度坐标,计算两点之间的距离
/** * * 计算两地之间的距离(给定经纬度) * * @param lat1 出发地经度 * @param lng1 出发地纬度 * @param lat2 目的地经度 * @param lng2 ...
- arcgis两点之间连线_ArcGIS中实现一种流向地图的方法
其实早在2011年,Esri的制图专家Mamata Akella就发表了一篇Blog,介绍在ArcGIS中实现一种流向地图的方法[1],来展示2011年Esri用户大会的参会者来源,如下图所示. 这里 ...
- 两点之间的连线java_java计算图两点之间的路径实例代码
java计算图两点之间的路径总结 本文实例为大家分享了java计算图两点之间的所有路径的具体代码,供大家参考,具体内容如下 1.给定图如下: 2.求0到3之间可达的所有路径 这里问题就是关于搜索遍历的 ...
最新文章
- angularjs与java_关于angularjs与java结合,获取后台数据并解析的问题
- linux命令之tee,技术|为初学者介绍的 Linux tee 命令(6 个例子)
- C# Check is No number
- Linux+varnish安装配置
- php 禁用外部实体,php – Doctrine 2 – 从实体外部禁用PrePersist
- 【干货】深度学习中的线性代数---简明教程
- 2021牛年春节海报PSD分层模板,简单一点就好!
- HTML静态网页练习例子
- SpringBoot及SpringCloud版本管理(Gradle版本)
- AD20—PCB总结
- MP3stego下载(强大的隐写工具)
- 外媒的指责恰恰反映华为的通信设备足够安全、技术领先
- FTP错误详解及解决方案
- leaflet maxZoom突破18
- linux怎样将文件夹设置共享,Linux操作系统下共享文件夹设置方法介绍
- 零经验小白的独游历程——俯视角45度游戏,人物用2D还是3D
- Kafka与其他MQ对比
- 基于STM32F103设计的智能门锁(支持多种开锁解锁方式)
- C++signed 与unsigned理解
- 2003服务器运行库,微软常用运行库合集包最新版支持XP/2003/7/8/8.1/10(32+64位)
热门文章
- NCHW与NC4HW4数据排布在卷积优化上的优劣分析
- CVE-2019-8660 iMessage 漏洞复现
- 无法定位程序输入点 inet_ntop 于动态链接库 WS2_32.dll上
- 信息熵与信息增益的理解
- All is about C!
- unity json mysql_unity——json总结
- 报错 之 from typing import OrderedDict ImportError: cannot import name ‘OrderedDict‘ from ‘typing‘
- C++ list用法总结
- MySQL的sql_mode解析与设置
- 刷新存储器的容量单位是什么_GD25Q80CSIG|相变存储器是什么,具备什么特点?