Acwing:137. 雪花雪花雪花(Hash表)
2024-10-03 16:07:52
有N片雪花,每片雪花由六个角组成,每个角都有长度。
第i片雪花六个角的长度从某个角开始顺时针依次记为ai,1,ai,2,…,ai,6ai,1,ai,2,…,ai,6。
因为雪花的形状是封闭的环形,所以从任何一个角开始顺时针或逆时针往后记录长度,得到的六元组都代表形状相同的雪花。
例如ai,1,ai,2,…,ai,6ai,1,ai,2,…,ai,6和ai,2,ai,3,…,ai,6,ai,1ai,2,ai,3,…,ai,6,ai,1就是形状相同的雪花。
ai,1,ai,2,…,ai,6ai,1,ai,2,…,ai,6和ai,6,ai,5,…,ai,1ai,6,ai,5,…,ai,1也是形状相同的雪花。
我们称两片雪花形状相同,当且仅当它们各自从某一角开始顺时针或逆时针记录长度,能得到两个相同的六元组。
求这N片雪花中是否存在两片形状相同的雪花。
输入格式
第一行输入一个整数N,代表雪花的数量。
接下来N行,每行描述一片雪花。
每行包含6个整数,分别代表雪花的六个角的长度(这六个数即为从雪花的随机一个角顺时针或逆时针记录长度得到)。
同行数值之间,用空格隔开。
输出格式
如果不存在两片形状相同的雪花,则输出:
No two snowflakes are alike.
如果存在两片形状相同的雪花,则输出:
Twin snowflakes found.
数据范围
1≤n≤1000001≤n≤100000,
0≤ai,j<100000000≤ai,j<10000000
输入样例:
2
1 2 3 4 5 6
4 3 2 1 6 5
输出样例:
Twin snowflakes found.
算法:Hash表
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; const int maxn = 1e5+;
const int mod = ; int arr[], snow[maxn][], head[maxn], Next[maxn];
int tot; int getHash(int *a) {
int sum = ;
for(int i = ; i < ; i++) {
sum = (sum + a[i]) % mod; //取模也是一种Hash方法
}
return sum;
} bool equal(int *a, int *b) {
sort(a, a + );
sort(b, b + );
for(int i = ; i < ; i++) {
if(a[i] != b[i]) {
return false;
}
}
return true;
} bool insert(int *a) {
int pos = getHash(a);
for(int i = head[pos]; i; i = Next[i]) {
if(equal(snow[i], a)) {
return true;
}
}
tot++;
memcpy(snow[tot], a, sizeof(int) * ); //此函数时读一块内存里的数据复制到另一块内存中
Next[tot] = head[pos]; //连接上一个结点
head[pos] = tot; //更新头结点
return false;
} int main() {
int T;
int mark = ;
scanf("%d", &T);
while(T--) {
for(int i = ; i < ; i++) {
scanf("%d", &arr[i]);
}
if(insert(arr)) {
mark = ;
break;
}
}
if(mark) {
printf("Twin snowflakes found.\n");
} else {
printf("No two snowflakes are alike.\n");
}
return ;
}
最新文章
- Asp.Net MVC<;七>;:Model
- Endless Sky源码学习笔记-2
- Android 2.x中使用actionbar - Actionbarsherlock (2)
- springMvc基本注解:@Component、@Repository(持久层) 、@Service(业务逻辑) 、@Controller(控制层)
- Ubuntu环境下利用ant编译nutch2.2.1 &; 配置nutch2.2.1
- 为什么会出现ADB rejected shell command
- No module named BeautifulSoup
- oracle分区表相关
- windows下使用远程工具登录虚拟机上的Linux、访问虚拟机上的服务 、端口转发、win7 telnet登陆虚拟机
- MySQL JDBC的setFetchSize
- uva11630 or hdu2987 Cyclic antimonotonic permutations(构造水题)
- webpack打包avalon
- PreparedStatement/Statement处理insert update等操作时乱码,以及URL
- Java中clone方法的使用
- css块级元素和行内元素详细解析
- Zabbix历史数据清理
- poj2398
- Keil软仿真STM32
- BitTorrent Sync 基于BT的文件同步
- Android studio 搭建测试环境 创建虚拟机
热门文章
- [BZOJ2594] [WC2006]水管局长(Kruskal+LCT)
- python第三方库-图像处理库pillow
- spark教程(13)-shuffle介绍
- leecode100热题 HOT 100(2)
- redis 学习(3)-- String 类型
- leecode刷题(26)-- 用栈实现队列
- ASP.NET Core[源码分析篇] - Authentication认证
- 设置Cookies
- Django框架——基础之路由系统(urls.py)11111111
- scrapy常用设置和注意点!!!!