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相关推荐

  1. leetcode之Isomorphic strings

    问题来源:Isomorphic strings 问题描述:给定两个字符串,判断它俩是否满足同构关系.同构关系表示两个字符串的字符能一一对应,例如title和paper构成同构关系,而foo和bar不构 ...

  2. 205 Isomorphic Strings

    205 Isomorphic Strings 链接:https://leetcode.com/problems/isomorphic-strings/ 问题描述: Given two strings ...

  3. CodeForces - 985F Isomorphic Strings

    假如两个区间的26的字母出现的位置集合分别是 A1,B1,A2,B2,....., 我们再能找到一个排列p[] 使得 A[i] = B[p[i]] ,那么就可以成功映射了. 显然集合可以直接hash, ...

  4. LeetCode 205 Isomorphic Strings(同构的字符串)(string、vector、map)(*)

    翻译 给定两个字符串s和t,决定它们是否是同构的.假设s中的元素被替换能够得到t,那么称这两个字符串是同构的.在用一个字符串的元素替换还有一个字符串的元素的过程中.所有字符的顺序必须保留. 没有两个字 ...

  5. [LeetCode] Isomorphic Strings - 字符串操作:数组计数字符个数问题

    题目概述: Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the ...

  6. C#LeetCode刷题之#205-同构字符串(Isomorphic Strings)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3770 访问. 给定两个字符串 s 和 t,判断它们是否是同构的. ...

  7. leetcode python3 简单题205. Isomorphic Strings

    1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第二百零五题 (1)题目 英文: Given two strings s and t ...

  8. 205. Isomorphic Strings

    1,题目要求 Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if th ...

  9. Easy-题目46:205. Isomorphic Strings

    题目原文: Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the ...

最新文章

  1. [iOS]调和 pop 手势导致 AVPlayer 播放卡顿
  2. 是否患有新冠肺炎? 你咳嗽一声
  3. 三大缓存框架ehcache、memcache和redis的介绍
  4. 2011.5.21信息系统项目管理师考试案例关注点
  5. 关于fi dd ler 手机抓包 网卡地址地址_实测对比Wireshark利用nRF52832抓包和Packet Sniffer抓包体验...
  6. 神经网络如何处理测试阶段出现的新特征?面向开放环境特征外推的图学习解决方案...
  7. SSO的通用标准OpenID Connect
  8. 为什么SAP UI5框架在应用整个生命周期只调用onBeforeRendering一次
  9. mysql数据库版本不同_mysql数据库版本不同所引起的问题
  10. 记一次曲折的jsp手工半盲注入
  11. 数据:哈佛大学新生近五成是富二代!
  12. java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.wifi.SCAN_RESULTS flg
  13. 删除顽固node_modules
  14. JAVA:jar包下载地址大全
  15. 怎样在神经网络设计中加入先验信息 - 权值共享
  16. 当年发明“熊猫烧香”病毒的天才,如今怎么样了?
  17. 边缘计算平台能力开放
  18. VC运行库安装错误0x80240017解决过程
  19. 【局域网音频实时传输、屏幕单播及广播】
  20. 粽子大战 —— 猜猜谁能赢

热门文章

  1. 两个定律,给你找了一个换手机的借口
  2. 通过人工智能实现内容智能审核及在世界杯的实战
  3. 【用Unity实现抛物线向目标点发射炮弹功能】
  4. 5.系统设计的工作内容与技能工具有哪些?
  5. tx:advice相关参数说明
  6. linux中mtd是什么目录,Linux mtd system
  7. mysql 节假日判断_sql 节假日判断(春节、中秋、国庆、周末等)
  8. 福建最新初级消防设施操作员考试真题及答案
  9. 11月14日:jquery
  10. [从头读历史] 第267节 诗经 邶风