poj 1021 2D_NIM

单细胞分析(五)——使用Harmony进行数据整合和去批次 为了保证单细胞RNA测序数据的准确性和可靠性,需要对数据进行样本去批次处理。去批次的方法包括Harmony,SeuratV3等,这些方法可以有效地消除批次效应和技术噪声,并提高单细胞RNA测序数据的质量,为后续的数据分析提供更加可靠的基础。 阅读详情

这道题有两个难点。

第一个难点就是读懂题意,众所周知,poj一般都是,读题两小时,解题五分钟。

题目的意思是一群点上下左右链接就算一个点群,一个点群旋转后依然等于原点群。给你两个图,里面有很多个点群,两个图对应点群一样就算两个图一样,问你这两个图一不一样。

第二个难点就是图的同构问题(“图”指上文中的点群),主要是算图的hash值,hash值一样的就算同一个图,hash值有很多种算法,一种是算每个点到其他点的距离之和,算出来的hash是一个值,不过代码不好实现,另一种是算每个点上下左右能走的距离,算出来的hash值是一个数组(包含n个点),我用的就是第二种算法。

#include <iostream>
#include <cstdio>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <map>
#include <algorithm>
#include <cmath>

#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define uint unsigned int
#define l(x) x<<1
#define r(x) x<<1|1
#define ms(a,b) memset(a,b,sizeof(a))

using namespace std;

int mmap[200][200];
int t, w, h, n;
int pos[111111][2];
int mhash[2][5555];
int x, y;

int main() {
	cin >> t;
	while (t--) {
		ms(mhash, 0);
		cin >> w >> h >> n;
		ms(mmap, 0);
		for (int i = 0; i < n; i++) {
			cin >> pos[i][0] >> pos[i][1];
			mmap[pos[i][0]][pos[i][1]] = 1;
		}

		for (int i = 0; i < n; i++) {
			x = pos[i][0];
			y = pos[i][1];

			for (int j = x; j < w && mmap[j][y] == 1; j++)
				mhash[0][i]++;
			for (int j = x; j >= 0 && mmap[j][y] == 1; j--)
				mhash[0][i]++;
			for (int j = y; j < h && mmap[x][j] == 1; j++)
				mhash[0][i]++;
			for (int j = y; j >= 0 && mmap[x][j] == 1; j--)
				mhash[0][i]++;
		}

		sort(mhash[0], mhash[0] + n);

		ms(mmap, 0);
		for (int i = 0; i < n; i++) {
			cin >> pos[i][0] >> pos[i][1];
			mmap[pos[i][0]][pos[i][1]] = 1;
		}

		for (int i = 0; i < n; i++) {
			x = pos[i][0];
			y = pos[i][1];

			for (int j = x; j < w && mmap[j][y] == 1; j++)
				mhash[1][i]++;
			for (int j = x; j >= 0 && mmap[j][y] == 1; j--)
				mhash[1][i]++;
			for (int j = y; j < h && mmap[x][j] == 1; j++)
				mhash[1][i]++;
			for (int j = y; j >= 0 && mmap[x][j] == 1; j--)
				mhash[1][i]++;
		}

		sort(mhash[1], mhash[1] + n);

		bool flag = true;
		for (int i = 0; i < n; i++) {
			if (mhash[0][i] != mhash[1][i]) {
				flag = false;
				break;
			}
		}

		if (flag)
			cout << "YES" << endl;
		else
			cout << "NO" << endl;
	}

	return 0;
}

不过对于第二种算法,直接用一个int保存所以hash值的和一样能够通过,不知道怎么证明,但我也找不出反例

#include <iostream>
#include <cstdio>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <map>
#include <algorithm>
#include <cmath>

#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define uint unsigned int
#define l(x) x<<1
#define r(x) x<<1|1
#define ms(a,b) memset(a,b,sizeof(a))

using namespace std;

int mmap[200][200];
int t, w, h, n;
int pos[111111][2];
int mhash[2];
int x, y;

int main() {
	cin >> t;
	while (t--) {
		ms(mhash, 0);
		cin >> w >> h >> n;
		ms(mmap, 0);
		for (int i = 0; i < n; i++) {
			cin >> pos[i][0] >> pos[i][1];
			mmap[pos[i][0]][pos[i][1]] = 1;
		}

		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				cout << mmap[i][j] << " ";
			}
			cout << endl;
		}

		for (int i = 0; i < n; i++) {
			x = pos[i][0];
			y = pos[i][1];

			for (int j = x; j < w && mmap[j][y] == 1; j++)
				mhash[0]++;
			for (int j = x; j >= 0 && mmap[j][y] == 1; j--)
				mhash[0]++;
			for (int j = y; j < h && mmap[x][j] == 1; j++)
				mhash[0]++;
			for (int j = y; j >= 0 && mmap[x][j] == 1; j--)
				mhash[0]++;
		}

		ms(mmap, 0);
		for (int i = 0; i < n; i++) {
			cin >> pos[i][0] >> pos[i][1];
			mmap[pos[i][0]][pos[i][1]] = 1;
		}
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				cout << mmap[i][j] << " ";
			}
			cout << endl;
		}

		for (int i = 0; i < n; i++) {
			x = pos[i][0];
			y = pos[i][1];

			for (int j = x; j < w && mmap[j][y] == 1; j++)
				mhash[1]++;
			for (int j = x; j >= 0 && mmap[j][y] == 1; j--)
				mhash[1]++;
			for (int j = y; j < h && mmap[x][j] == 1; j++)
				mhash[1]++;
			for (int j = y; j >= 0 && mmap[x][j] == 1; j--)
				mhash[1]++;
		}

		if (mhash[0] == mhash[1])
			cout << "YES" << endl;
		else
			cout << "NO" << endl;
	}

	return 0;
}
现代控制理论(4)——李雅普诺夫稳定性理论 文章目录 阅读详情

相关推荐

奇异值分解(SVD)C++实现

奇异值分解SVD(紧奇异值分解,截断奇异值分解)C++实现

weixin_45804601的博客 4172

poj1021

题目描述:判断两个图是否等价。 对等价的定义是:两个图有相同个数的连通块,第一个图里面的每个连通块总能在第二个图里面找到一个连通块(未与别的块匹配)与之匹配。 对连通块匹配的定义是:两个连通块如果能经过若干次平移、对称、旋转等操作之后重合,则说它们是匹配的。 现在要求设计程序,输入两个图,输出它们是否等价。 输入格式:第一行一个整数t,表示有t组数据,接下来t组数据,每组数据由3行构成,第一

SparkRat的家 1313

告别Overleaf!本地LaTeX环境配置:VSCode+TeXLive完全指南(Windows/Mac双平台)

本文详细介绍了如何在Windows和Mac平台上配置本地LaTeX环境,使用VSCode和TeXLive打造高效的专业写作工作流。从TeXLive安装到VSCode插件配置,再到高级技巧与性能优化,帮助用户摆脱Overleaf限制,实现更快速、更私密的学术写作体验。

3c4x5z6v7b的博客 952

OJ-POJ1021-暴力

这题网上有代码量很少的解法,可惜我看不明白。 先不管题目,讨论如何判断两个图形相同(旋转,平移,翻转)? 就是如下8个图形中,任选出两个,要得出它们是两个相同的图形: 我的方法特土特暴力:列出8种,然后分别比较。。。 回到题目,自己的理解是(对左右两个板): a,找到群。要求左右,群数相同,群中点数相同 b,群中点数相同的,一定有一对一相同的形状 分析过程: 1,找群,

zxwtry的博客 569

Android 13 系统定制:实现第三方Launcher预置与原生Launcher3的共存切换

本文详细介绍了在Android 13系统中实现第三方Launcher预置与原生Launcher3共存切换的技术方案。通过修改ResolverActivity逻辑、处理首次启动设置以及优化用户切换机制,开发者可以灵活定制默认Launcher,同时保留用户自由选择权。文章还提供了常见问题排查指南和性能优化建议,帮助提升双Launcher方案的稳定性和用户体验。

weixin_30275415的博客 126

S7-1200与KINCO伺服通信实战:CM CANopen模块配置避坑指南(附完整PDO映射表)

本文详细解析了西门子S7-1200 PLC通过CM CANopen模块与KINCO伺服驱动器的通信配置全流程,重点解决PDO映射混乱、心跳报文配置错误等常见问题。提供硬件组态、参数设置、PDO映射模板及故障排查方案,助力工业自动化系统实现稳定高效的多轴运动控制。

2y3u4i5o6p的博客 1101

POJ 1021 Joseph

题目链接:http://poj.org/problem?id=1012 题意:有2*k个人围城一个圈,前k个是好人,后k个是坏人,现在从第一个开始报数,报到m的出去。求最小的m使得所有的坏人先出去。k 思路:约瑟夫环问题,我们可以暴力枚举m,对于每一个m来检查是不是满足情况。先固定了m之后,那么可以看看前k个人是不是在出去k个人之后还留下。只要找到出去一个人后,当前人的编号变化

DS-K的博客 436

从AMBA到USB:手把手教你评估和选择Synopsys DesignWare里的免费商用IP

本文详细介绍了如何评估和选择Synopsys DesignWare中的免费商用IP,从AMBA到USB等关键模块。通过技术参数核对、验证环境评估和集成注意事项,帮助工程师高效利用这些经过硅验证的商业级IP,提升SoC设计效率。文章还探讨了免费IP与付费IP的边界策略,避免常见陷阱。

weixin_42683394的博客 297

POJ 1021--2D-Nim

poj 1021

Hering_Linux的专栏 744

数字图像处理:直方图匹配或规定化Histogram Matching (Specification)原理及感悟

本文介绍了连续图像和数字图像直方图匹配(直方图规定化)的原理、处理过程,并提供了案例进行了讲解。可以看到,直方图均衡处理是直方图匹配的一个重要桥梁。 最后,对于直方图规定化这个翻译个人觉得很low,个人感觉叫指定直方图更好理解,但Histogram Specification怎么翻译确实不太好把握,因此还是叫Histogram Matching直方图匹配最好。

老猿Python 2880

巡检机器人的基于ROS系统的任务管理架构设计总结

本文探讨了基于ROS(机器人操作系统)的工业巡检机器人任务管理架构设计,提出分层闭环方案。架构围绕稳、准、活、扩四大目标,分为感知层(多源数据融合)、调度层(智能决策)、执行层(动作控制)和数据层(存储交互)。关键技术包括ROS2实时性优化、功能包复用和多机器人协同调度。实践案例显示,该架构在电力巡检中使任务完成率达99%,在化工园区实现95%覆盖率。当前挑战包括SLAM地图漂移和多机通信延迟,未来可通过语义SLAM和区域通信优化。

start_up_go的博客 467

[点阵图同构 Hash] POJ 1021 2D-Nim

做博弈做着做着做到了这样一道题 汗 对于每个连通块hash一下 大概有两种方法 连通块内两两距离的平方和 每个点向四个方向最多能走的距离的平方和的和 具体 我没写过

雯舞 673

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

POJ 1021 2D-Nim

Description The 2D-Nim board game is played on a grid, with pieces on the grid points. On each move, a player may remove any positive number of contiguous pieces in any row or column. The player...

ZRP442235的博客 409

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

POJ 1021 2D-Nim

链接:POJ 1021 题意:给你两个图,判定图中由字母组成的区域多边形是否一一对应相等,换句话说,图二与图一中的所有的区域多边形能建立起满射关系。 如果来自两个图的两个多边形全等(可以不位似),即可认为是一一对应了 看到这个题。。很晕。。 借鉴的网上的思路(话说怎么总遇到这种题。。自己想真是想不出好办法。。做题太少了) 对每一个有字母的点,搜索四个方位能相连成线的字母点,把能这样找到的

skyword的专栏 823

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

POJ 1021 2D-Nim 笔记

2D-Nim游戏。玩家一次可以删除某行或某列中连续的棋子,删除最后棋子的玩家获胜。给出两盘棋从2D-Nim的角度判断是否等价。

woniupengpeng的专栏 712

[ZOJ1413][POJ1021] 2D Nim 非人品解法

ZOJ: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1413POJ: http://poj.org/problem?id=1021题目大意:其实和Nim问题是没有关系的。给出两个玩2D-Nim游戏的棋

Dango's happy life 1570

poj 1021 java_POJ 1021 2D-Nim

题意:给你两个图,判定图中由字母组成的区域多边形是否一一对应相等,换句话说,图二与图一中的所有的区域多边形能建立起满射关系。如果来自两个图的两个多边形全等(可以不位似),即可认为是一一对应了看到这个题。。很晕。。借鉴的网上的思路(话说怎么总遇到这种题。。自己想真是想不出好办法。。做题太少了)对每一个有字母的点,搜索四个方位能相连成线的字母点,把能这样找到的字母总数+1记为这个字母点的value,对...

weixin_28877505的博客 168

POJ 1021 2D-Nim(JAVA实现)

2D-Nim Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4409 Accepted: 2021 Description The 2D-Nim board game is played on a grid, with pieces on the grid points. On each move, a player ma...

winking83的博客 355

poj 1021 2D-Nim

<br />// poj 1021 2D-Nim<br />/* <br />别看它名字,其实这题跟Nim游戏一点关系都没有,是判断棋盘上两个连通分支(经过翻转、镜像后)是否等价 <br />做了本题才知道可以用hash来判断,不然可能真的要八种情况都考虑 ,那样会写死人。。。hash方法很巧妙,见代<br />码 ,本题 0 Ms(数据太弱),再接再厉!<br />*/ <br />#include <iostream><br />#include <algorithm><br />using names

birdforever的专栏 1704

poj 1021 2D-Nim 图论

判断点阵是否是同构,乱搞了个·n^3的方法,就是判断每个点到四周的距离,然后记录下来,排个序,如果两个完全一样则为YES,否则为NO。       应该在dfs上加优化就可以降到n^2.但感觉意义不大 一开始WA了2次,最后发现时结构体的构造函数没有初始化 /* author:jxy lang:C/C++ university:China,Xidian Unkjiversity **If

弱弱的jxy 1871

POJ1021 2D-Nim

题目来源:http://poj.org/problem?id=1021 题目大意:   有一种在棋盘上玩的游戏,每一步,一个玩家可以从棋盘上拿走连续行或列的棋子。谁拿到最后一颗棋子就胜利。如下图所示的棋盘,玩家可以拿走(A), (B), (A, B), (A, B, C), 或 (B,F),等,但不能拿走(A, C), (D, E), (H, I) 或(B, G)。   仔细看上面两个...

weixin_30871293的博客 186

poj 1021 2D-Nim 模拟

题意: 给两个平面,每个平面上有一些点,相邻的点可构成点集,为两个平面内的点集是够都对应相似。两个点集相似是指经过对称或旋转或平移后相等。 分析: 直接模拟判断。 代码: //poj 1021 //sep9 #include #include #include using namespace std; int w,h,n; int g[128][128]; int vis[128]

sepNINE的专栏 1049

poj-1021--2D-Nim--点阵图同构

2D-Nim Time Limit:1000MS Memory Limit:10000K Total Submissions:4136 Accepted:1882 Description The 2D-Nim board game is played on a grid, with pieces on the gri...

weixin_30559481的博客 301

poj 1021 java_北大poj-1021

2D-NimTime Limit: 1000MSMemory Limit: 10000KTotal Submissions: 4066Accepted: 1851DescriptionThe 2D-Nim board game is played on a grid, with pieces on the grid points. On each move, a player may remove...

weixin_36345268的博客 229

北大oj1021——2D-Nim

http://poj.org/problem?id=1021 2D-Nim | Time Limit: 1000MS | | Memory Limit: 10000K | Description The 2D-Nim board game is played on a grid, with pieces on the grid points. On each move, a player ma...

m0_37609239的博客 448

北大poj-1021

2D-Nim Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4066 Accepted: 1851 Description The 2D-Nim board game is played on a grid, with pieces on the gri...

dianzhi2787的博客 309
上一篇: 访问虚函数表
下一篇: poj 1011 Sticks
FawkesLi
博客等级 码龄8年 21粉丝 170原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值