题目大意:有$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. 20155210 2016-2017-2 《Java程序设计》第7周学习总结

    20155210 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 时间的度量: GMT(Greenwich Mean Time)时间:现在不是标准时间 世界时 ...

  2. 2018.09.14 codeforces364D(随机化算法)

    传送门 根据国家集训队2014论文集中胡泽聪的随机化算法可以通过这道题. 对于每个数,它有12" role="presentation" style="posi ...

  3. 2018.07.08 POJ 2481 Cows(线段树)

    Cows Time Limit: 3000MS Memory Limit: 65536K Description Farmer John's cows have discovered that the ...

  4. hdu-1069(dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 题意:一群猴子,给出n块砖的长x宽y高z,用这些砖拼起的高度最高是多少, 要求底下的砖的长宽都要 ...

  5. 【Unity】1.1 安装Unity 5.3.4 开发环境

    分类:Unity.C#.VS2015 创建日期:2016-03-23 一.简介 Unity分个人版(Personal)和专业版(Pro).个人版是免费的(部分高级功能受限,但初学者也用不到它),Pro ...

  6. x11vnc配置--ubuntu14.04

    x11vnc是连接到真实的X会话,相比vnc4server和tightvncserver自己创建不同分辨率的xserver来说,画面延时和显示效果应该要好一些.两种服务都试过,个人感觉x11vnc要好 ...

  7. (最短路 spfa)Wormholes -- poj -- 3259

    http://poj.org/problem?id=3259 Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions ...

  8. no_namespace rename 在C++中是什么意思啊

    #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("E ...

  9. POJ1511来回最短路

    POJ1511 问你从1到其它点得所有最短路之和  与  其他点到1得所有最短路之和 得总和 思路很明确就是两次最短路,翻转一次地图就好了 一开始就是两次spfa之间处理好数据得更新管理就好 vect ...

  10. tf中softmax_cross_entropy_with_logits与sparse_softmax_cross_entropy_with_logits

    其实这两个都是计算交叉熵,只是输入数据不同. #sparse 稀疏的.稀少的 word_labels = tf.constant([2,0]) predict_logits = tf.constant ...