c语言sscanf函数的用法是什么
259
2022-09-16
Codeforces 868 D. Huge Strings (二分+随机+SAM)
Description
You are given n strings s1, s2, …, sn consisting of characters 0 and 1. m operations are performed, on each of them you concatenate two existing strings into a new one. On the i-th operation the concatenation saisbi is saved into a new string sn + i (the operations are numbered starting from 1). After each operation you need to find the maximum positive integer k such that all possible strings consisting of 0 and 1 of length k (there are 2k such strings) are substrings of the new string. If there is no such k, print 0.
Input
The first line contains single integer n (1 ≤ n ≤ 100) — the number of strings. The next n lines contain strings s1, s2, …, sn (1 ≤ |si| ≤ 100), one per line. The total length of strings is not greater than 100.The next line contains single integer m (1 ≤ m ≤ 100) — the number of operations. m lines follow, each of them contains two integers ai abd bi (1 ≤ ai, bi ≤ n + i - 1) — the number of strings that are concatenated to form sn + i.
Output
Print m lines, each should contain one integer — the answer to the question after the corresponding operation.
Example input
5011010111111031 26 54 4
Example output
120
题意
一个字符串最多可以包含几位二进制数的所有组合。
思路
以下做法属于旁门左道,二分 + 随机 + SAM 成功水过数据。
首先利用这个字符串建立后缀自动机,然后二分答案 k ,对于每一个 k 我们最多测试 1000
因为初始的字符串可能是由某两个子串连接得到的,如果不做限制的话该串最长可以到达 2100×100
我们假设当前字符串为 s ,它是由 a,b 连接得到的,假如 len(s)>1000 , s=s.substr(0,500)+s.substr(len(s)−500,500)
最终的结果为 max(test(a),test(b),test(s))
AC 代码
#include
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~