首页 > 其他分享 >CF 2010 C2. Message Transmission Error (hard version) (*1700) 字符串+哈希

CF 2010 C2. Message Transmission Error (hard version) (*1700) 字符串+哈希

时间:2024-09-04 14:51:52浏览次数:10  
标签:1700 mod1 mod2 const Transmission hard t2 t1 int

CF 2010 C2. Message Transmission Error (hard version) (*1700) 字符串+哈希

题目链接

题意

给你一个字符串,让你判断是否是由某个字符串首尾拼接重叠而成的。

思路

做法很多,最暴力就直接枚举字符串长度,然后哈希即可。

代码

#include<bits/stdc++.h>

using namespace std;

#define ff first
#define ss second
#define pb push_back
#define all(u) u.begin(), u.end()
#define endl '\n'
#define debug(x) cout<<#x<<":"<<x<<endl;

typedef pair<int, int> PII;
typedef long long LL;
const int inf = 0x3f3f3f3f;
const int N = 1e5 + 10, M = 105;
const int mod = 1e9 + 7;
const int cases = 0;

struct Hash{
   const int mod1=100663319,mod2=201326611;
   const LL P1=131,P2=13331;
   vector<LL> p1,p2,h1,h2,t1,t2;

   void init(string s){
      int n=(int)s.size()-1;
      p1.assign(n+1,0);p2.assign(n+1,0);
      h1.assign(n+1,0);h2.assign(n+1,0);
      t1.assign(n+2,0);t2.assign(n+2,0);
      p1[0]=p2[0]=1;
      for(int i=1;i<=n;i++){
         p1[i]=p1[i-1]*P1%mod1;
         p2[i]=p2[i-1]*P2%mod2;
         h1[i]=(h1[i-1]*P1%mod1+s[i]-'0'+1)%mod1;
         h2[i]=(h2[i-1]*P2%mod2+s[i]-'0'+1)%mod2;
      }
      for(int i=n;i>=1;i--){
         t1[i]=(t1[i+1]*P1%mod1+s[i]-'0'+1)%mod1;
         t2[i]=(t2[i+1]*P2%mod2+s[i]-'0'+1)%mod2;
      }
   }

   int getHash1(int l,int r){
      return (h1[r]-(h1[l-1]*p1[r-l+1])%mod1+mod1)%mod1;
   }

   int getHash2(int l,int r){
      return (h2[r]-(h2[l-1]*p2[r-l+1])%mod2+mod2)%mod2;
   }

   int getRevHash1(int l,int r){
      return (t1[l]-(t1[r+1]*p1[r-l+1])%mod1+mod1)%mod1;
   }

   int getRevHash2(int l,int r){
      return (t2[l]-(t2[r+1]*p2[r-l+1])%mod2+mod2)%mod2;
   }
}Hash;
void Showball(){
   string s;
   cin>>s;
   int n=s.size();
   s="?"+s;
   Hash.init(s);
   for(int i=n/2+1;i<n;i++){
     if(Hash.getHash1(1,i)==Hash.getHash1(n-i+1,n)&&Hash.getHash2(1,i)==Hash.getHash2(n-i+1,n))
      return cout<<"YES\n"<<s.substr(1,i)<<endl,void();
   }
   cout<<"NO\n";
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int T=1;
    if(cases) cin>>T;
    while(T--)
    Showball();
    return 0;
}

标签:1700,mod1,mod2,const,Transmission,hard,t2,t1,int
From: https://www.cnblogs.com/showball/p/18396483

相关文章

  • CF1998E2 Eliminating Balls With Merging (Hard Version)
    原题链接考虑对于每个\(i\),算出向左扩展到\(1\)时向右至少和至多扩展到哪里,记为\(minr\)和\(maxr\)。那么也就是说每个\(i\)会对\(minr\simmaxr\)做出贡献,差分一下就可以了。重点是怎么计算这两个东西。先说\(maxr\)。如果暴力跳,过程是:先向左扩展直到不能扩展,然后......
  • ShardingSphere-JDBC实现数据加解密
    一、什么是ShardingSphere?        ShardingSphere定位为轻量级Java框架,在Java的JDBC层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。ApacheShardingSphere旨......
  • Apache顶级项目ShardingSphere — SQL Parser的设计与实现
    导语:SQL作为现代计算机行业的数据处理事实标准,是目前最重要的数据处理接口之一,从传统的DBMS(如MySQL、Oracle),到主流的计算框架(如spark,flink)都提供了SQL的解析引擎,因此想对sql进行精细化的操作,一定离不开SQLParser。ApacheShardingSphere是一套开源的分布式数据库中间件解决方......
  • 对比 Vitess,ShardingSphere 有哪些不同
    本篇为InfoQ中文站供稿原文链接:https://www.infoq.cn/article/NHSAAmN*MfpLiTiTTEu5?from=timeline&isappinstalled=0ShardingSphere是什么?ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(规......
  • Apache顶级项目ShardingSphere — SQL Parser的设计与实现
    导语:SQL作为现代计算机行业的数据处理事实标准,是目前最重要的数据处理接口之一,从传统的DBMS(如MySQL、Oracle),到主流的计算框架(如spark,flink)都提供了SQL的解析引擎,因此想对sql进行精细化的操作,一定离不开SQLParser。ApacheShardingSphere是一套开源的分布式数据库中间件解决方案......
  • 对比 Vitess,ShardingSphere 有哪些不同
    本篇为InfoQ中文站供稿原文链接:https://www.infoq.cn/article/NHSAAmN*MfpLiTiTTEu5?from=timeline&isappinstalled=0ShardingSphere是什么?ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(规划中)这3......
  • 内核模块踩内存问题定位利器- hardware breakpoint
    内核由于共享内存地址空间,如果没有合适的工具,很多踩内存的问题即使复现,也无法快速定位;在新的内核版本中引入了一个新工具hardwarebreakpoint,其能够监视对指定的地址的特定类型(读/写)的数据访问,有利于该类问题的定位;以下是一个使用该工具的例子(来自内核代码linux-3.10/sampl......
  • Atcoder [AGC006D] Median Pyramid Hard 题解 [ 紫 ] [ 二分 ] [ adhoc ]
    MedianPyramidHard:二分trick加上性质观察题。trick我们可以二分值域,然后把大于等于它的数标记成\(1\),其他标记为\(0\)(有些题需要标记成\(-1\)),然后根据这个来check方案是否可行,这通常通过判断某个数是否是\(1\)来实现。本质上其实就是check大于等于它的数能否成为......
  • 使用Hardhat的forking功能在本地模拟EVM链真实环境
    HardhatNetwork可以复制主网区块链状态数据到本地环境,包括所有余额和部署的合约。称为forkingmainnet,可以使得本地测试模拟主网环境,但不用gas,所做的交易也不会真的发生在主网。不止以太坊主网,其他兼容EVM的区块链都可以fork。我们来看一下如何使用这个重要功能。如下例子,是如何......
  • Java后端微服务架构下的数据库分库分表:Sharding-Sphere
    Java后端微服务架构下的数据库分库分表:Sharding-Sphere大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!随着微服务架构的广泛应用,数据库层面的扩展性问题逐渐凸显。Sharding-Sphere作为一个分布式数据库中间件,提供了数据库分库分表的能力,帮助开发者解......