题目大意:有$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. 38 Cell-phone Emissions can change Brain Activity 手机辐射有可能改变大脑活动

    Cell-phone Emissions can change Brain Activity 手机辐射有可能改变大脑活动 So many people use the cell phone so fr ...

  2. 数据库面试sql

    问题一:.有三张表,学生表S,课程表C,学生课程表SC 01:写出建表语句 答: create table s(id integer primary key,name varchar(20)); cr ...

  3. python读写操作

    import sys 1 def test(): a=int(input()) x=[int(i) for i in input().split(' ')] y=[int(j) for j in sy ...

  4. 常见XML解析器

    xpp3 官网 http://www.extreme.indiana.edu/xgws/xsoap/xpp/ 简介 Xml Pull Parser (in short XPP) is a stream ...

  5. Sublime必用快捷键[私人]

    最近一年前端开发都是用sublime这款编辑器, 相对于webStorm强大而启动慢.editplus快启动而功能弱, sublime恰好在两者之间:而且其指令行安装.更新.卸载插件比eclipse之 ...

  6. (用了map) Registration system

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=93241#problem/C (654123) http://codeforces.com ...

  7. Android-Thread线程的状态

    介绍Thread线程的状态之前,必须要讲解CPU执行线程的随机性: 例如:有五个线程,CPU中央处理器,在执行这五个线程的时候,有可能先执行Thread-0,有可能先执行Thread-3,等等,都有可 ...

  8. 【转】如何使用BehaviorSDK

    原文地址:http://blogs.msdn.com/b/windows8devsupport/archive/2014/10/24/behaviorsdk.aspx 前言 在开发过程中,程序员一般通 ...

  9. SQLite3动态库、静态库编译

    资源准备 1.下载SQLite3源码,下载地址为https://www.sqlite.org/download.html.下载sqlite-amalgamation-3200000.zip和sqlit ...

  10. Mono For Android 之 配置环境

    下载 Xamarin Mono For Android 4.6.07004 完整离线破解版 (包括除 Android SDK 外的所有文件) Android SDK. 资源源自 http://www. ...