Hrbust 2300 下雪啦【字符串Hash】
来源:互联网 发布:凤凰金融 以大数据为 编辑:程序博客网 时间:2024/05/16 11:20
下雪啦Time Limit: 2500 MSMemory Limit: 32768 KTotal Submit: 276(51 users)Total Accepted: 58(26 users)Rating: Special Judge: NoDescription
陈月亮最喜欢的季节就是冬天了,这不看着窗外飘起了雪花,陈月亮开心的跑出屋来看雪。但是迷迷糊糊的陈月亮不知道自己是在做梦还是真的下起了雪。突然她想起了一句话,在真实世界中是没有两片一样的雪花的。于是你的任务就是比较这场雪中的所有雪花,如果出现了两朵完全一致的雪花,则证明陈月亮是在梦中。
每朵雪花用六个整数表示,范围在(1 – 10000000)之间,表示雪花六个花瓣的长度,六个整数的先后出现顺序可能是顺时针顺序也可能是逆时针顺序,并且可能是从任意一个花瓣开始的。比如说对同一个花瓣,描述方法可能是1 2 3 4 5 6 或者 4 3 2 1 6 5
Input第一行为一个整数T,表示有T组测试数据。
每组测试数据第一行为一个整数N(0 < N <= 100000),表示雪花的数目。
接下来n行每行六个整数,描述一朵雪花。
Output如果没有相同的雪花,输出“No two snowflakes are alike.”,否则输出“Twin snowflakes found.”
Sample Input1
2
1 2 3 4 5 6
4 3 2 1 6 5
Twin snowflakes found.
Source2016级新生程序设计全国邀请赛思路:
暴力字符串哈希即可。
值得注意的点是我们得到了每个字符串的哈希值之后,直接用map映射存的话会MLE(破OJ),需要再开一个Hash来存每个字符串的哈希值。
Ac代码:
#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>#include<map>using namespace std;#define ll long long intunsigned long long int h[10];unsigned long long int Getval(int s[],int n){ unsigned long long int x=1; for(int i=0;i<n;i++) { h[i]=h[i-1]+x*s[i]; x=x*19260817; } return h[n-1];}const unsigned long long int maxn=450000;const unsigned long long int hashh=1000007;struct hashmap{ unsigned long long int a[maxn]; int head[hashh]; int next[maxn]; int size; void init() { memset(head,-1,sizeof(head)); size=0; } bool find(unsigned long long int val) { int tmp=(val%hashh+hashh)%hashh; for(int i=head[tmp];i!=-1;i=next[i]) { if(val==a[i])return true; } return false; } void add(unsigned long long int val) { int tmp=(val%hashh+hashh)%hashh; if(find(val))return ; a[size]=val; next[size]=head[tmp];//令next指向-1、 head[tmp]=size++; }}H;int main(){ int t; scanf("%d",&t); while(t--) { H.init(); int flag=0; int n; scanf("%d",&n); int a[10]; for(int i=0;i<n;i++) { for(int j=0;j<6;j++) { scanf("%d",&a[j]); } unsigned long long int sum=Getval(a,6); for(int z=0;z<6;z++) { int temp=a[0]; for(int j=0;j<6;j++) { if(j<5) a[j]=a[j+1]; else a[j]=temp; } unsigned long long int summ=Getval(a,6); if(H.find(summ)>0)flag=1; } reverse(a,a+6); for(int z=0;z<6;z++) { int temp=a[0]; for(int j=0;j<6;j++) { if(j<5) a[j]=a[j+1]; else a[j]=temp; } unsigned long long int summ=Getval(a,6); if(H.find(summ)>0)flag=1; } H.add(sum); } if(flag==1)printf("Twin snowflakes found.\n"); else printf("No two snowflakes are alike.\n"); }}
阅读全文
0 0
- Hrbust 2300 下雪啦【字符串Hash】
- hrbust 2300 下雪啦 (hash vector)
- 下雪啦
- 下雪啦
- 下雪啦
- 下雪啦!
- 株洲下雪啦`~~!~
- 下雪啦,好冷
- 哇!下雪啦!
- 今天加班,突闻老家下雪啦!!
- 明天要下雪啦,"表达式"笔记
- 哇哦~下雪啦~冬天来了
- 下雪
- 16哈理工新生赛 H 下雪啦 (哈希表)
- 字符串hash
- 字符串HASH
- 字符串Hash
- 字符串hash
- Xamairn.Forms 用户控件——控件——ListView——ListView数据源
- NG机器学习week11 Application: Photo OCR
- 最大公约数和最小公倍数问题--分解质因子
- bzoj1023 [SHOI2008]cactus仙人掌图
- Linux里的权限
- Hrbust 2300 下雪啦【字符串Hash】
- Xamarin.Forms 用户界面——控件——ListView——Cell 外观
- C# 应用程序自删除
- NYOJ35
- RHEL7.3(Redhat) 安装配置 ElasticSearch5.5.1、ElasticHead、kibana5.5.1、X-Pack
- 如何得心应手地运用贪心?
- POJ
- 4.Myeclipse开发Java web程序
- Java:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。