bzoj4104 [Thu Summer Camp 2015]解密运算】的更多相关文章

题目链接 BZOJ4104 题解 我们将已知字符排序,由循环就可以得到一个对应关系 如样例就是: 0->第5行 1->第1行 1->第2行 1->第3行 1->第5行 2>第6行 3->第4行 按照这个循序加入答案即可 #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #inc…
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4104 [题解] 脑洞+找规律做出来的.. 我用样例作为说明吧 样例给了我们这个 AAAC.A B 看起来没啥用 这是那个矩阵的最后一列对吧. 第一列是什么呢?我们都知道,按字典序排列. .AAAAB C 由于这是一个环,所以第一个字母和最后一个字母是相邻的.换句话说,我们只要知道第一个字母和最后一个字母的对应关系,我们就能知道环长什么样了. 问题在于.有很多个重复的数,我们怎么知道对应的顺…
4104: [Thu Summer Camp 2015]解密运算 Time Limit: 10 Sec  Memory Limit: 512 MB Description 对于一个长度为N的字符串,我们在字符串的末尾添加一个特殊的字符".".之后将字符串视为一个环,从位置1,2,3,...,N+1为起点读出N+1个字符,就能得到N+1个字符串.   比如对于字符串“ABCAAA”,我们可以得到这N+1个串:   ABCAAA.   BCAAA.A   CAAA.AB   AAA.ABC…
4104: [Thu Summer Camp 2015]解密运算 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 370  Solved: 237 Description 对于一个长度为N的字符串,我们在字符串的末尾添加一个特殊的字符".".之后将字符串视为一个环,从位置1,2,3,...,N+1为起点读出N+1个字符,就能得到N+1个字符串. 比如对于字符串“ABCAAA”,我们可以得到这N+1个串: ABCAAA. BCAAA.A C…
https://www.lydsy.com/JudgeOnline/problem.php?id=4104 对于一个长度为N的字符串,我们在字符串的末尾添加一个特殊的字符".".之后将字符串视为一个环,从位置1,2,3,...,N+1为起点读出N+1个字符,就能得到N+1个字符串. 比如对于字符串“ABCAAA”,我们可以得到这N+1个串: ABCAAA. BCAAA.A CAAA.AB AAA.ABC AA.ABCA A.ABCAA .ABCAAA 接着我们对得到的这N+1个串按字典…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4104 想了很久,想出一个 nlogn (也许是 n2logn )的,可惜空间是 n2 . 已知字符集,对它排个序,对应上给出的那些字符,就能知道每个字符前面是哪个字符. 这样得到了一些长度为2的串.这些长度为2的串一定也是这 n+1 行的开头:所以对它们排序后对应上给出的那些字符,就能得到长度为3的串.这样就能得到答案. 但是太慢.考虑已知长度为 k 的串,想一下把它接成 2*k 的串.…
Description   Input 第一行有三个整数N,M,p,分别代表序列的长度.平方操作与询问操作的总次数以及在平方操作中所要模的数.   接下来一行N个数代表一开始的序列{X1,X2,...,XN}.   接下来M行,每行三个整数op,l,r.其中op代表本次操作的类型.若op=0,代表这是一次平方操作,平方的区间为[l,r]:如果op=1,代表这是一次询问操作,询问的区间为[l,r].   Output 对于每次的询问操作,输出一行代表这段区间内数的总和.注意:答案没有对任何数取模.…
首先嘛这道题目只要知道一个东西就很容易了:所有循环的最小公约数<=60,成一条链的长度最大为11,那么我们就可以用一个很裸的方法.对于在链上的数,我们修改直接暴力找出并修改.对于在环上的数,我们对每一步建立一颗线段树,那么修改就变成了交换60棵线段树的某个子树.然后我们就可以愉快的写啦~~~ 在想的时候被同学坑了,他说最长的循环不超过60.... 在实现方面,我用一个map+树状数组维护链上的答案,然后用60棵线段树来维护这个环.懂了之后还是很好写哒~~~ Code: #include <cs…
传送门 线段树妙题. 显然平方几次就会循环(打表证明不解释). 然后所有环长度的lcmlcmlcm不大于70. 因此维护一下当前区间中的节点是否全部在环上. 不是直接暴力到叶子节点修改. 否则整体打标记. 简单合并一下就行了.(细节见代码) 代码: #include<bits/stdc++.h> #define N 100005 #define lc (p<<1) #define rc (p<<1|1) #define mid (T[p].l+T[p].r>>…
题目链接 BZOJ4105 题解 平方操作orz,虽说应该是线段树,但是不会维护啊QAQ 小瞧一眼题解... 平方成环?环长\(lcm\)小于\(60\)? 果然还是打表找规律题.... 那就很好做了,先预处理每个数是否在环上,如果当前区间存在数不在环上,就暴力修改 如果当前区间都在环上了,就处理出环,之后每次修改只在环上走一步即可 每次修改可能会重置\(logn\)个节点的信息,由于重置一次要求出环,是\(O(60)\)的,所以修改总复杂度是\(O(60nlogn)\)的,可以接受 #incl…