CFgym:Hidden Anagrams(Hash)
来源:互联网 发布:淘宝卖农产品要什么证 编辑:程序博客网 时间:2024/06/05 16:11
题意:给两个字符串S和T,长度<=4000,找出各自最长的连续子串,使得两个子串的组成字母和其数量完全相同(即两子串排序后完全一样),Timelimit:10s。
思路:暴力找出S所有子串的Hash值,扔进set,从大到小枚举长度,在T中找。
//reference: weareateam# include <bits/stdc++.h>using namespace std;typedef long long LL;typedef unsigned long long ull;char s[4008], t[4008];LL a[4008][28]={0}, b[4008][28]={0};int slen, tlen;int t1[4008], t2[4008];unordered_set<ull>S;bool check(int x){ for(int i=1; i+x-1<=tlen; ++i) { ull r = 2333; for(int j=0; j<26; ++j) r += (r<<4)+b[i+x-1][j]-b[i-1][j]; if(S.count(r)) return true; } return false;}int main(){ scanf("%s%s",s+1,t+1); slen = strlen(s+1); tlen = strlen(t+1); for(int i=1; i<=slen; ++i) { for(int j=0; j<26; ++j) a[i][j] = a[i-1][j]; ++a[i][s[i]-'a']; } for(int i=1; i<=tlen; ++i) { for(int j=0; j<26; ++j) b[i][j] = b[i-1][j]; ++b[i][t[i]-'a']; } for(int i=1; i<=slen; ++i) { for(int j=i; j<=slen; ++j) { ull r = 2333; for(int k=0; k<26; ++k) r += (r<<4)+a[j][k]-a[i-1][k]; S.insert(r); } } int ans = min(slen, tlen); while(ans) { if(check(ans)) break; --ans; } printf("%d\n",ans); return 0;}
阅读全文
0 0
- CFgym:Hidden Anagrams(Hash)
- CFgym:Palindromization(字符串Hash)
- CodeForces GYM 101158D Hidden Anagrams hash+unordered_set
- LeetCode *** 49. Group Anagrams (Hash Table)
- CFgym:Castle(KMP)
- CFGym
- CFGym
- CFGym
- CFGym
- CFGym
- LeetCode[Hash Table]: Anagrams
- [leetcode][hash] Anagrams
- CFgym:Database(字符串处理)
- CFgym:Digits Permutation(DFS)
- CFgym:Good morning!(dfs)
- Aizu 1370 Hidden Anagrams 字符串哈希
- CFgym:Bonuses and Teleports(贪心)
- CFgym:Of Zorcs and Axes(贪心)
- jdk1.6环境下struts2改spring boot方案
- 对于BS与CS以及内核,渲染引擎,渲染模式等初步了解
- SeetaFace 开源的人脸识别代码
- leetcode 363. Max Sum of Rectangle No Larger Than K
- mvc+json+ajax架构制作客户信息管理小项目
- CFgym:Hidden Anagrams(Hash)
- 关于android中项目导入显示乱码或者运行在手机显示乱码问题的解决
- vga
- 设计模式之装饰模式(Decorator)
- Android自动化测试
- 使用RTL-SDR和Matlab Simulink玩转软件无线电(二十一)
- 第六届 蓝桥杯 省赛 三羊献瑞
- 内核定时器的使用
- Kotlin for Android(八)Kotlin空安全