博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3349 Snowflake
阅读量:5034 次
发布时间:2019-06-12

本文共 2016 字,大约阅读时间需要 6 分钟。

#include 
#include
#define PRI 93961struct SF{ int e[6]; SF *next; SF(){ e[0] = -1; next = NULL; }};SF snow[PRI];bool exactsame(SF s1, SF s2){ for (int i = 0; i < 6; i++){ if (s1.e[i] != s2.e[i]) return false; } return true;}int mycmp(const void *a, const void *b){ return *(int *)a - *(int *)b;}int main(){ bool ok = false; int nos, key; SF *p, tmp; scanf("%d", &nos); for (int i = 0; i < nos; i++){ for (int j = 0; j < 6; j++) scanf("%d", &tmp.e[j]); if (!ok){ key = 0; qsort(tmp.e, 6, sizeof(tmp.e[0]), mycmp); for (int j = 0; j < 6; j++){ key += tmp.e[j]; key %= PRI; } if (snow[key].e[0] == -1) snow[key] = tmp; else if (exactsame(snow[key], tmp)) ok = true; else if (snow[key].next == NULL){ if (exactsame(snow[key], tmp)) ok = true; else{ SF *newsf = new SF; for (int k = 0; k < 6; k++) newsf->e[k] = tmp.e[k]; snow[key].next = newsf; } } else{ p = snow[key].next; if (exactsame(*p, tmp)) ok = true; while (p->next && !ok){ p = p->next; if (exactsame(*p, tmp)) ok = true; } if (!ok){ SF *newsf = new SF; for (int k = 0; k < 6; k++) newsf->e[k] = tmp.e[k]; p->next = newsf; } } } } if (ok) printf("Twin snowflakes found.\n"); else printf("No two snowflakes are alike.\n"); return 0;}

【开博第一篇(*^__^*) ……~】虽然是水题但是调了一下午TUT。坑点在神马clockwise,counterclockwise都是骗人的。。六条边correspond的匹配就好了~

嗯哼。来说思路,是每个雪花按arm从小到大用qsort排序好,然后用哈希开地址法比较,若比较时有相同则标记ok = true,否则将该雪花存入相应地址。关键码用的是加和取mod。判断部分写得稍微冗杂了些。><

转载于:https://www.cnblogs.com/Larmes/p/3481322.html

你可能感兴趣的文章
删除TXPlatform
查看>>
LaTex:图片排版
查看>>
并发访问超时的问题可能性(引用)
查看>>
中小团队基于Docker的Devops实践
查看>>
利用python打开摄像头并保存
查看>>
System函数的使用说明
查看>>
Selenium-测试对象操作之:获取浏览器滚动条滚动距离
查看>>
Linux下MySQL数据库安装与配置
查看>>
Extjs String转Json
查看>>
oracle入门(4)——少而常用的命令
查看>>
打印机设置(PrintDialog)、页面设置(PageSetupDialog) 及 RDLC报表如何选择指定打印机...
查看>>
Java 虚拟机部分面试题
查看>>
JS中 String/JSON 方法总结
查看>>
二叉树的遍历问题总结
查看>>
3.14-3.20周总结
查看>>
Spring之面向切面编程AOP
查看>>
MATLAB GUI程序设计中使文本框接收多行输入的方法
查看>>
全文检索-Elasticsearch (四) elasticsearch.net 客户端
查看>>
Oracle DBMS_SESSION
查看>>
sublime复制当前行到下一行
查看>>