题目大意:有$n$个无限长的循环字符串,所谓循环字符串,就是由某一个子串重复叠加而成。现在想知道最早在哪一位,这n个字符串的那一位的字母相同。

数据范围:$n≤30000$,答案$<2^{63}$。

不难发现,此题你只要对每个字母求一个最早都出现的位置,然后取一个$min$就可以了。

对于每个字母取一个最早大家都出现过的位置,这个显然用扩展中国剩余定理去求就可以了。

注意此题中串长的lcm可能会爆long long 要用__int128

 #include<bits/stdc++.h>
#define MM 30005
#define L __int128
using namespace std; int id[MM][]={},len[MM]={};
int n;
int vis[]={}; void exgcd(L a,L b,L &x,L &y){
if(b==){x=; y=; return;}
exgcd(b,a%b,y,x);
y-=a/b*x;
}
L inv(L x,L MOD){
L a=,b=;
exgcd(x,MOD,a,b);
return a;
}
L __lcm(L m1,L m2){return m1*m2/__gcd(m1,m2);}
void excrt(L &c1,L &m1,L c2,L m2){
L gcd=__gcd(m1,m2),lcm=__lcm(m1,m2);
if((c2-c1)%gcd) {m1=; return;}
L x=(inv(m1/gcd,m2/gcd)*((c2-c1)/gcd)%lcm*m1%lcm+c1+lcm)%lcm;
c1=x; m1=lcm;
} int main(){
scanf("%d",&n);
for(int x=;x<=n;x++){
memset(vis,,sizeof(vis));
char c[]; scanf("%s",c+);
len[x]=strlen(c+);
for(int i=;i<=len[x];i++) vis[c[i]]=i; for(int i='A';i<='Z';i++) id[x][i-'A']=vis[i];
for(int i='a';i<='z';i++) id[x][i-'a'+]=vis[i];
}
L ans=1e18;// ans=ans*ans;
L INF=ans;
for(int x=;x<;x++){
int ok=;
for(int i=;i<=n;i++) if(id[i][x]==) {ok=; break;}
if(ok==) continue;
L c=id[][x],m=len[];
for(int i=;i<=n;i++){
L C=id[i][x],M=len[i];
excrt(c,m,C,M);
if(m==) break;
}
if(m==) continue;
if(c==) c=m;
ans=min(ans,c);
}
if(ans==INF) cout<<-<<endl;
else{
long long out=ans;
cout<<out<<endl;
}
}

【xsy1018】 小A的字母游戏 扩展CRT的更多相关文章

  1. 扩展CRT +扩展LUCAS

    再次感谢zyf2000超强的讲解. 扩展CRT其实就是爆推式子,然后一路合并,只是最后一个式子上我有点小疑惑,但整体还算好理解. #include<iostream> #include&l ...

  2. GUI线程 :打字母游戏

    代码: /** * */ package com.niit.syntronized; import java.awt.Color; import java.awt.FlowLayout; import ...

  3. 扩展crt

    题解: 很久之前写过一篇..但好像写的不太正常 就重新写一篇 对于质数有一种朴素的crt合并 但其实那个没啥用..那个能做的扩展crt都能做 并且那个好像不能动态加方程组 所以就会扩展crt就行了 扩 ...

  4. 微信小程序开发的游戏《拼图游戏》

    微信小程序开发的游戏<拼图游戏> 代码直接考进去就能用 pintu.js // pintu.js Page({ /** * 页面的初始数据 */ data: { }, initGame: ...

  5. BZOJ5418[Noi2018]屠龙勇士——exgcd+扩展CRT+set

    题目链接: [Noi2018]屠龙勇士 题目大意:有$n$条龙和初始$m$个武器,每个武器有一个攻击力$t_{i}$,每条龙有一个初始血量$a_{i}$和一个回复值$p_{i}$(即只要血量为负数就一 ...

  6. JSP简单练习-猜字母游戏

    <!-- guessCharExample.jsp --> <%@ page contentType="text/html; charset=gb2312" %& ...

  7. 猜字母游戏(Java)

    我的代码: package day20181025; import java.util.Arrays; import java.util.Scanner; /** * 猜字母 * @author Ad ...

  8. 差分数组|小a的轰炸游戏-牛客317E

    小a的轰炸游戏 题目链接:https://ac.nowcoder.com/acm/contest/317/E 思路  这题考查的是对差分数组原理和前缀和的理解. 四个数组分别记录朝着四个方向下放的个数 ...

  9. 扩展中国剩余定理(扩展CRT)详解

    今天在$xsy$上翻题翻到了一道扩展CRT的题,就顺便重温了下(扩展CRT模板也在里面) 中国剩余定理是用于求一个最小的$x$,满足$x\equiv c_i \pmod{m_i}$. 正常的$CRT$ ...

随机推荐

  1. C和指针小结(C/C++程序设计)

    C和指针 相关基础知识:内存的分配(谭浩强版) 1.整型变量的地址与浮点型/字符型变量的地址区别?(整型变量/浮点型变量的区别是什么) 2.int *p,指向整型数据的指针变量. 3.通过指针变量访问 ...

  2. 教你把p标签的一行字掰弯文字换行): word-wrap: break-word;

    1 使用前的p是这样: 2  使用后: p{ word-wrap: break-word; overflow: hidden; } 3  又想变直: p{ word-wrap: normal; ove ...

  3. 【redis】linux上的安装与配置(详细图解)

    转载自:https://blog.csdn.net/yjqyyjw/article/details/73293455:经过个人测试也适用于当前最新稳定的3.x的版本,顺便填了几个坑. 1.下载 htt ...

  4. obj-c的优缺点

    优点: 1) Cateogies : 类别 2) Posing : 扮演 3) 动态识别 : 编译时与运行时动态识别类型 4) 指标计算 : 指针计算 指针的 +- * / 5) 弹性信息传递 : 某 ...

  5. 《SLAM for Dummies》中文版《SLAM初学者教程》

    SLAM for Dummies  SLAM初学者教程A Tutorial Approach to Simultaneous Localization and Mapping  一本关于实时定位及绘图 ...

  6. 在 Java 中使用 protobuf

    在 Java 中使用 protobuf 从 https://github.com/google/protobuf/releases 下载编译器,并设置环境变量. 创建java项目添加protobuf- ...

  7. (KMP)Simpsons’ Hidden Talents -- hdu -- 2594

    http://acm.hdu.edu.cn/showproblem.php?pid=2594 Simpsons’ Hidden Talents Time Limit: 2000/1000 MS (Ja ...

  8. ASP.NET MVC 使 Controller 的 Action 只接受 Ajax 请求。

    首先,ajax 请求跟一般的 web 请求本质是相同的,都是 http 请求.理论上服务器端是无法区分该次请求是不是 ajax 请求的,但是,既然标题都已经说了,那么肯定是有办法做的. 在 ajax ...

  9. go 编译问题

    golang的编译使用命令 go build , go install;除非仅写一个main函数,否则还是准备好目录结构:GOPATH=工程根目录:其下应创建src,pkg,bin目录,bin目录中用 ...

  10. asp.net接收传入的数据流

    我们在日常的应用中,都会遇到这样一个问题,就是我们做的asp.NET程序,会收到其它第三方软件传过来的一些信息数据流,当然了一些文本形式的信息,可以采用get或post的方法来接收,可是要是传过来的是 ...