当前位置:首页 > 智能硬件 > 人工智能AI
[导读]   P2106 机密谍报   问题描述   HY 非常喜欢和 GJQ 闲聊,而其他人等都还奋斗在 OI 的道路上,为了不打扰同学,他们交流统一用密文,交流信息的明文是由0和1组成

  P2106 机密谍报

  问题描述

  HY 非常喜欢和 GJQ 闲聊,而其他人等都还奋斗在 OI 的道路上,为了不打扰同学,他们交流统一用密文,交流信息的明文是由0和1组成的非空序列,而密文是由0、1和若干个密码字母组成,每个 密码字母代表不同的01串,

  例如,密文 011a0bf00a01。密码破译的关键是确定每个密码的含义。

  经过长期统计分析,现在知道了每个密码的固定长度,如今,蛋疼的同学们又截获了它们俩的两段 密文S1 和S2 ,并且知道S1 =S2 ,即两段密文代表相同的明文。你的任务是帮助同学们对给定的两段密文进行分析,看一看有多少种可能的明文。

  输入格式

  输出格式

  M(表示有 M种可能的明文)

  样例输入

  100ad1

  cc1

  4

  a 2

  d 3

  c 4

  b 50

  样例输出

  2

  提示

  明文的长度 ≤ 10000,保证不用高精度

  此题其实很水,用并查集将相同的位置合并起来,然后再把值为0的位置合并到一个集合里,值为1的位置合并到一个集合里,然后既不在0集合里也不在1集合里的集合数就是不能确定的位置数,答案就是2 n 但是注意判无解,如果最后0集合和1集合在一个集合里,即表示某位置既是0又是1,则无解。

  代码:

  #include《stdio.h》

  #include《iostream》

  #include《algorithm》

  #include《cstring》

  #include《vector》

  #define N 55555

  #define ll unsigned long long

  using namespace std;

  const ll T=40000;

  string s1,s2;

  vector《ll》P[233];

  char A[233];

  ll n,L[233],sum1[N],sum2[N],F[N];

  bool mark[N];

  ll GF(ll x)

  {

  if(F[x]!=x)F[x]=GF(F[x]);

  return F[x];

  }

  void Merge(ll x,ll y)

  {

  ll fx=GF(x),fy=GF(y);

  if(fx!=fy)F[fx]=fy;

  }

  ll QM(ll a,ll b)

  {

  ll ans=1;

  while(b)

  {

  if(b&1)ans=ans*a;

  b》》=1;a=a*a;

  }

  return ans;

  }

  int main()

  {

  ll i,j,k,ans;ans=0;

  cin》》s1》》s2;

  s1=“ ”+s1;s2=“ ”+s2;

  scanf(“%lld”,&n);

  for(i=1;i《=n;i++)scanf(“ %c %lld”,&A[i],&k),L[A[i]]=k;

  for(i=1;i《=T;i++)F[i]=i;

  for(i=1;i《s1.length();i++)

  if(s1[i]==‘0’)sum1[i]=sum1[i-1]+1,Merge(sum1[i],T);

  else if(s1[i]==‘1’)sum1[i]=sum1[i-1]+1,Merge(sum1[i],T+1);

  else sum1[i]=sum1[i-1]+L[s1[i]],P[s1[i]].push_back(sum1[i-1]);

  for(i=1;i《s2.length();i++)

  if(s2[i]==‘0’)sum2[i]=sum2[i-1]+1,Merge(sum2[i],T);

  else if(s2[i]==‘1’)sum2[i]=sum2[i-1]+1,Merge(sum2[i],T+1);

  else sum2[i]=sum2[i-1]+L[s2[i]],P[s2[i]].push_back(sum2[i-1]);

  for(i=1;i《=n;i++)

  for(j=1;j《=L[A[i]];j++)

  for(k=1;k《P[A[i]].size();k++)Merge(P[A[i]][k-1]+j,P[A[i]][k]+j);

  for(i=1;i《=sum1[s1.length()-1];i++)if(GF(i)!=GF(T)&&GF(i)!=GF(T+1)&&(!mark[GF(i)]))ans++,mark[GF(i)]=1;

  if(GF(T)!=GF(T+1))printf(“%lld”,QM(2,ans));

  else printf(“0”);

  }

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

2023年10月18日,中国在第三届“一带一路”国际合作高峰论坛期间发布《全球人工智能治理倡议》,围绕人工智能发展、安全、治理三方面系统阐述了人工智能治理中国方案。

关键字: 人工智能 大模型 代码

我们看到这么多的安全问题,部分原因在于我们对待安全的方式:安全性通常被认为是事后考虑的问题,是在开发结束时才添加到设备上的东西。然而,复杂的系统,尤其是嵌入式系统,有一个很大的攻击面,这让攻击者有机可乘,能够在“盔甲”上...

关键字: 代码 嵌入式系统 软件漏洞

新富人群财务需求多元发展,投顾服务迎来新机遇 上海2023年9月20日 /美通社/ -- 2023年9月19日,上海交通大学上海高级金融学院(高金)与全球领先的金融服务机构嘉信理财(Charles Schwab)联合发...

关键字: BSP ADVANCED INA 代码

北京2023年9月14日 /美通社/ -- 生物医药高科技公司诺诚健华(港交所代码:09969;上交所代码:688428)今日宣布,新型蛋白酪氨酸磷酸酶SHP2变构抑制剂ICP-189联用针对表皮生长因子受体(EGFR)...

关键字: IC HP 代码 ARMA

上海2023年9月1日 /美通社/ -- 2023上半年,安集科技(股票代码:688019)市场拓展规划成效显现,营业收入稳健增长。 全球半导体产业挑战持续存在的情形下,安集科技秉承发扬"克难攻坚,敢打硬...

关键字: 安集科技 BSP 代码 半导体材料

国际酒店运营商升级其在线支付功能 上海2023年8月28日 /美通社/ -- 加拿大金融科技公司Nuvei Corporation(以下简称“Nuvei”或“公司”)(纳斯达克代码:NVEI)(多伦多证券交易所代码:N...

关键字: 代码 IP SE 纳斯达克

2023年上半年收入7.459亿元 同比增长5.1% 毛利率水平上升 海外收入同比增长65.4% 香港2023年8月22日 /美通社/ -- 金邦达宝嘉控股有限公司及其附属公司(以下合称「金邦达」、「...

关键字: 数字化 代码 嵌入式软件 COM

我们经常对正在进行数字化转型的亚马逊云科技客户建议,将云迁移视为其数字化转型的一部分,数字化转型本身必须由业务成果驱动。其中治理计划的有效性决定了云迁移和数字化转型的成功与否。数字化转型中的云迁移总有结束的时候,但是如果...

关键字: 代码 数字化 云服务

广州及苏州生产基地产品均实现"出口"零突破 北京2023年8月21日 /美通社/ -- 百济神州(纳斯达克代码:BGNE;香港联交所代码:06160;上交所代码:688235)是一家全球性生物科技公...

关键字: 神州 代码 TI PD

近年来,国内电子公司和芯片设计企业大举进攻汽车、医疗和工业等高可靠应用(mission-critical)领域,为自己找到了摆脱红海的新领域。但是高可靠应用多数都需要功能安全认证,在许多行业在诸如汽车、航空电子、医疗和工...

关键字: 代码 代码分析工具
关闭
关闭