首页 > 其他分享 >Solution - Atcoder ARC171D Rolling Hash

Solution - Atcoder ARC171D Rolling Hash

时间:2024-08-15 08:57:29浏览次数:13  
标签:Atcoder ARC171D times cdots Rolling hash 合法 operatorname DP

对于这个 \(\operatorname{hash}(A_L, \cdots, A_R)\),一个比较经典的想法是做差分,即令 \(s_i = \sum\limits_{j = 1}^i A_j B^{i - j}\)。
于是 \(\operatorname{hash}(A_L, \cdots, A_R) = s_R - s_{L - 1}\times B^{R - L + 1}\not = 0\)。
那么也就是 \(s_R\not = s_{L - 1}\times B^{R - L + 1}\)。

此时这里只有右边带了个 \(B\),肯定是尽量想让两边形式尽量相近的,于是可以考虑同乘 \(B^{-R}\),就转化为了 \(s_R\times B^{-R} = s_{L - 1}\times B^{-(L - 1)}\)。

同时也能发现,对于 \(s_i\times B^{-i}\),不管取什么值都存在合法的 \(x_i\) 的选取。
这是因为如果知道了 \(s_{i - 1}\times B^{- (i - 1)}\),有式子 \(B s_{i - 1} + x_i = s_i\),那同除 \(B^i\),有 \(s_{i - 1}B^{-(i - 1)} + x_i\times B^{-i} = s_i\times B_{-i}\),因为 \(P\in \mathbb{P}, 1\le B < P\),所以一定有解。

那么就可以令 \(y_i = s_i\times B^{-i}\)。
如果存在 \(\operatorname{hash}(A_L, \cdots, A_R)\not = 0\),那就相当于是 \(y_R\not = y_{L - 1}\)。

那么就可以考虑转化图论,连边 \((L - 1, R)\)。

考虑现在什么情况是不合法的,能发现是如果存在 \(y_i\ge P\) 就会不合法。

那么如果选出许多点互相都没有连边,那么这些点的 \(y_i\) 就可以被赋成一个值。

于是可以考虑设 DP,\(f_s\) 表示已经确定了 \(s\) 集合内的数的取值,最少用的数的数量。

直接子集 DP,若最后 \(f_U\le P\)(\(U\) 表示全集) 就合法。

时间复杂度 \(\mathcal{O}(3^n)\)。

#include<bits/stdc++.h>
int f[1 << 17], g[1 << 17], ok[1 << 17];
int main() {
   int P, n, m; scanf("%d%*d%d%d", &P, &n, &m);
   n++;
   g[0] = (1 << n) - 1;
   for (int i = 0; i < n; i++)
      g[1 << i] = (1 << n) - 1;
   for (int l, r; m--; ) {
      scanf("%d%d", &l, &r), l--;
      g[1 << l] ^= 1 << r, g[1 << r] ^= 1 << l;
   }
   ok[0] = 1;
   for (int s = 1; s < (1 << n); s++) {
      int x = __builtin_ctz(s);
      ok[s] = ok[s ^ (1 << x)] && (g[s ^ (1 << x)] >> x & 1);
      g[s] = g[s ^ (1 << x)] & g[1 << x];
   }
   memset(f, 0x3f, sizeof(f));
   f[0] = 0;
   for (int s = 1; s < (1 << n); s++)
      for (int t = s; t; t = (t - 1) & s)
         if (ok[t])
            f[s] = std::min(f[s], f[s ^ t] + 1);
   puts(f[(1 << n) - 1] <= P ? "Yes" : "No");
   return 0;
}

标签:Atcoder,ARC171D,times,cdots,Rolling,hash,合法,operatorname,DP
From: https://www.cnblogs.com/rizynvu/p/18360161

相关文章

  • Solution - Atcoder ABC155F Perils in Parallel
    首先可以按\(a_i\)排序,对于区间\([l_i,r_i]\)可以通过二分确定实际影响到的\(b_i\)的区间。考虑到区间\(i\in[l,r]\)的\(b_i\)都取反影响到的元素过多,考虑去减少影响到的元素。于是可以想到令\(c_i=b_i\oplusb_{i-1}\),那么对于区间\([l,r]\)操作实际影响......
  • Atcoder nomura2020F Sorting Game
    首先考虑如果固定了\(a\),如何判定这个\(a\)是否能被排序。如果存在\(a_i>a_j(i<j)\),那么\(a_i\)肯定要交换到\(a_j\)后面,那么就肯定会交换\(a_i,a_j\)。于是合法条件就是如果存在\(a_i>a_j(i<j)\),那么\(a_i,a_j\)只相差一个二进制位。那就还能知道此时一......
  • 【视频讲解】滚动回归Rolling Regression、ARIMAX时间序列预测Python、R实现应用
    原文链接: https://tecdat.cn/?p=37338原文出处:拓端数据部落公众号分析师:JixinZhong  本文将通过视频讲解,展示如何用滚动回归预测,并结合一个R语言多元时间序列滚动预测:ARIMA、回归、ARIMAX模型分析实例的代码数据,为读者提供一套完整的实践数据分析流程。滚动回归估计是于一......
  • 摘要生成—通过摘要风格控制摘要的生成/抽取,原文阅读与理解:GEMINI: Controlling The S
    GEMINI:ControllingTheSentence-LevelSummaryStyleinAbstractiveTextSummarizationGEMINI:在抽象文本摘要中控制句子级摘要风格paper:https://arxiv.org/abs/2304.03548github:https://github.com/baoguangsheng/gemini本文介绍了一种自适应摘要抽取/生成方......
  • AtCoder Regular Contest 041 D 辺彩色
    洛谷传送门AtCoder传送门比较有意思的小清新题。第一步是时光倒流,看成是每次经过一条未被访问过的边才染色。奇偶相关容易想到二分图。发现若有一个黑白交替的奇环(即从一个点开始遍历完整个环得到的颜色序列是黑白交替地),那我们可以先染完这个环。又因为它是奇环,所以我们遍历......
  • AtCoder ABC 366题解
    前言本文部分思路来自于网络,仅供参考。A-Election2题目大意给定两个市长候选人的票数,求结果是否已经确定。解题思路如果剩下的人全部投票给票少的人票少的人也不能赢,则结果就已经确定了。code#include<bits/stdc++.h>usingnamespacestd;intmain(){intn,t,......
  • AtCoder Beginner Contest 366
    A-Election2(abc366A)题目大意\(n\)张票,目前投了\(t\)给高桥,\(a\)给青木。问剩余票随便分配,是否都是一个结局。解题思路考虑最好情况,即剩下票全部投给当前票少的,看看能不能超过对方,会则结局会变,否则不会变。神奇的代码#include<bits/stdc++.h>usingnamespaces......
  • AtCoder Beginner Contest 366 C,D题解
    C-BallsandBagQuery题解题意没什么好说的,给出q次查询,进行求解思路很简单的一道题,但这篇题解的作用是引出unordered_set,这个东西的作用类似set,但没有排序,相当于哈希。unordered_set有几种操作,接下来介绍三种insert,没什么可说的,普通的插入erase,进行弹出size,返回大......
  • Log4j2中RollingFile的文件滚动更新机制
    一、什么是RollingFileRollingFileAppender是Log4j2中的一种能够实现日志文件滚动更新(rollover)的Appender。rollover的意思是当满足一定条件(如文件达到了指定的大小,达到了指定的时间)后,就重命名原日志文件进行归档,并生成新的日志文件用于log写入。如果还设置了一定时间内......
  • G - AtCoder Office
    G-AtCoderOfficeProblemStatement$N$peopleworkattheAtCoderoffice.Theofficekeepsrecordsofentriesandexits,andtherehavebeen$M$entriesandexitssincetherecordsbegan.The$i$-th$(1\leqi\leqM)$recordisrepresentedbyapairof......