hdu 6863 Isomorphic Strings
Isomorphic Strings
题解:暴力枚举n的所有因子,判断是否合法。判断合法第一步:判断每段中各字符出现次数是否相同,第二部:判断每段的最小表示是否相同。因子还可以减枝。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 5e6+10;
char s[maxn];
int sum[maxn][26];
int ls[26];
char xka[maxn];
int getmin(int st,int ed)
{int c =0 ;for(int i=st;i<ed;i++) xka[c++] = s[i];int i = 0,j = 1,k = 0,t;while(i < c && j < c && k < c){t = xka[(i+k)%c] - xka[(j+k)%c];if(!t) k++;else{if(t > 0) i += k+1;else j += k+1;if(i == j) j++;k = 0;}}return i >j ?j :i;
}
int ok(int x,int n)
{int res[26];for(int i=0;i<26;i++) res[i] = sum[x][i] - sum[0][i];// for(int i=0;i<26;i++) printf("%d ",res[i]); printf("\n");int f = 0;for(int i=x;i<n;i+=x){int qq[26];f = 0;for(int j=0;j<26;j++){qq[j] = sum[i+x][j] - sum[i][j];// printf("%d ",qq[j]);if(qq[j]!=res[j]){f = 1;break;}}if(f) return 0;}return 1;
}
char tmp[maxn];
int jd(int x,int n)
{int pos = getmin(0,x);for(int i=0;i<x;i++) tmp[i] = s[(pos+i)%x];int f = 0;for(int i=x;i<n;i+=x){int tpos = getmin(i,i+x);f = 0;for(int j=0;j<x;j++){if(tmp[j]!=s[i+(tpos+j)%x]){f = 1;break;}}if(f) return 0;}return 1;
}
int main()
{int t; scanf("%d",&t);while(t--){int n; scanf("%d",&n);scanf("%s",s);for(int i=0;i<=n;i++) { for(int j=0;j<26;j++) sum[i][j] = 0; }for(int i=0;i<26;i++) ls[i] = 0;for(int i=0;i<n;i++) {ls[s[i]-'a'] ++;sum[i+1][s[i]-'a']++;for(int j=0;j<26;j++) sum[i+1][j] += sum[i][j];}int gcd = __gcd(ls[0],ls[1]);for(int i=2;i<26;i++) gcd = __gcd(gcd,ls[i]);int flag = 0;for(int i=2;i*i<=n&&i<=gcd;i++){if(n%i!=0) continue;if(ok(i,n)){if(jd(i,n)){flag = 1;break;}}if(ok(n/i,n)){if(jd(n/i,n)){flag = 1;break;}}}if(jd(1,n)&&n>1) flag = 1;if(flag) puts("Yes");else puts("No");}
}
hdu 6863 Isomorphic Strings相关推荐
- leetcode之Isomorphic strings
问题来源:Isomorphic strings 问题描述:给定两个字符串,判断它俩是否满足同构关系.同构关系表示两个字符串的字符能一一对应,例如title和paper构成同构关系,而foo和bar不构 ...
- 205 Isomorphic Strings
205 Isomorphic Strings 链接:https://leetcode.com/problems/isomorphic-strings/ 问题描述: Given two strings ...
- CodeForces - 985F Isomorphic Strings
假如两个区间的26的字母出现的位置集合分别是 A1,B1,A2,B2,....., 我们再能找到一个排列p[] 使得 A[i] = B[p[i]] ,那么就可以成功映射了. 显然集合可以直接hash, ...
- LeetCode 205 Isomorphic Strings(同构的字符串)(string、vector、map)(*)
翻译 给定两个字符串s和t,决定它们是否是同构的.假设s中的元素被替换能够得到t,那么称这两个字符串是同构的.在用一个字符串的元素替换还有一个字符串的元素的过程中.所有字符的顺序必须保留. 没有两个字 ...
- [LeetCode] Isomorphic Strings - 字符串操作:数组计数字符个数问题
题目概述: Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the ...
- C#LeetCode刷题之#205-同构字符串(Isomorphic Strings)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3770 访问. 给定两个字符串 s 和 t,判断它们是否是同构的. ...
- leetcode python3 简单题205. Isomorphic Strings
1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第二百零五题 (1)题目 英文: Given two strings s and t ...
- 205. Isomorphic Strings
1,题目要求 Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if th ...
- Easy-题目46:205. Isomorphic Strings
题目原文: Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the ...
最新文章
- [iOS]调和 pop 手势导致 AVPlayer 播放卡顿
- 是否患有新冠肺炎? 你咳嗽一声
- 三大缓存框架ehcache、memcache和redis的介绍
- 2011.5.21信息系统项目管理师考试案例关注点
- 关于fi dd ler 手机抓包 网卡地址地址_实测对比Wireshark利用nRF52832抓包和Packet Sniffer抓包体验...
- 神经网络如何处理测试阶段出现的新特征?面向开放环境特征外推的图学习解决方案...
- SSO的通用标准OpenID Connect
- 为什么SAP UI5框架在应用整个生命周期只调用onBeforeRendering一次
- mysql数据库版本不同_mysql数据库版本不同所引起的问题
- 记一次曲折的jsp手工半盲注入
- 数据:哈佛大学新生近五成是富二代!
- java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.wifi.SCAN_RESULTS flg
- 删除顽固node_modules
- JAVA:jar包下载地址大全
- 怎样在神经网络设计中加入先验信息 - 权值共享
- 当年发明“熊猫烧香”病毒的天才,如今怎么样了?
- 边缘计算平台能力开放
- VC运行库安装错误0x80240017解决过程
- 【局域网音频实时传输、屏幕单播及广播】
- 粽子大战 —— 猜猜谁能赢