[USACO22OPEN]

题目描述

奶牛们正在尝试一种相互交换编码信息的新方法,她们在相关的字母中混入不相关的字母,使信息难以解码。

奶牛们传输两个字符串 \(s\) 和 \(t\),每个字符串的长度不超过 \(10^5\),仅由小写字母 'a' 到 'r' 组成。为了尝试理解这条编码消息,你将被给定 \(Q\) 个询问(\(1 \leq Q \leq 10^5\))。

每个询问给定小写字母 'a' 到 'r' 的一个子集。你需要对每个询问判断 \(s\) 和 \(t\) 在仅包含询问中给定的字母时是否相等。

输入格式

输入的第一行包含 \(s\)。

第二行包含 \(t\)。

第三行包含 \(Q\)。

以下 \(Q\) 行每行包含一个询问字符串。在一个询问字符串中,所有字母均不相同。此外,所有询问字符串均已排序,且没有一个询问字符串出现超过一次。

输出格式

对每个询问,如果 \(s\) 和 \(t\) 在仅包含询问中给定的字母时相等则输出 'Y',否则输出 'N'。

样例 #1

样例输入 #1

aabcd
caabd
4
a
ac
abd
abcd

样例输出 #1

YNYN

提示

【样例解释】

对于第一个询问,当仅包含字符 'a' 时,两个字符串均变为 "aa"。

对于第二个询问,第一个字符串变为 "aac" 而第二个字符串变为 "caa"。

【测试点性质】

  • 测试点 2 满足 \(|s|,|t|,Q\le 1000\)。
  • 测试点 3-11 没有额外限制。

如果询问字符串只有一个字符,我们比较一下这种字符在两个串中的数量是否相等即可。

如果有两个字符呢这时于超时。那就暴力吧。

但是字符一多起来怎么办?发现如果s,t在仅包含有ab时相等,仅包含bc时相等,仅包含ac时相等,那么他在仅包含abc时也相等。因为两两字符的位置关系都一样,那么整个取出来也一样。这里可以感性理解一下。

字符最多26个。我们可以预处理出在每两个字符时s和t相不相等,然后对于每个询问,枚举字符串中每两个字符,按照预处理看他们相不相等。如果都相等那么整个都相等。

#include<cstdio>
#include<cstring>
const int N=1e5+5;
int n,s[20],t[20],m,q,f[20][20],k;
char a[N],b[N],x[20];
int solve(char x,char y)
{
char s[N],t[N];
int p=0,q=0;
for(int i=1;i<=n;i++)
if(a[i]==x||a[i]==y)
s[++p]=a[i];
for(int i=1;i<=m;i++)
if(b[i]==x||b[i]==y)
t[++q]=b[i];
if(p!=q)
return 0;
for(int i=1;i<=p;i++)
if(s[i]!=t[i])
return 0;
return 1;
}
int main()
{
scanf("%s%s%d",a+1,b+1,&q);
n=strlen(a+1),m=strlen(b+1);
for(int i=1;i<=n;i++)
s[a[i]-'a']++;
for(int i=1;i<=m;i++)
t[b[i]-'a']++;
for(char i='a';i<='r';i++)
for(char j='a';j<='r';j++)
f[i-'a'][j-'a']=solve(i,j);
while(q--)
{
scanf(" %s",x+1);
k=strlen(x+1);
if(k==1)
{
if(s[x[1]-'a']!=t[x[1]-'a'])
putchar('N');
else
putchar('Y');
}
else
{
for(int i=1;i<=k;i++)
{
for(int j=1;j<=k;j++)
{
if(!f[x[i]-'a'][x[j]-'a'])
putchar('N'),k=0;
}
}
if(k)
putchar('Y');
}
}
}

[USACO2022OPEN S] Subset Equality S的更多相关文章

  1. Project Euler 106:Special subset sums: meta-testing 特殊的子集和:元检验

    Special subset sums: meta-testing Let S(A) represent the sum of elements in set A of size n. We shal ...

  2. [LeetCode] Partition Equal Subset Sum 相同子集和分割

    Given a non-empty array containing only positive integers, find if the array can be partitioned into ...

  3. [LeetCode] Largest Divisible Subset 最大可整除的子集合

    Given a set of distinct positive integers, find the largest subset such that every pair (Si, Sj) of ...

  4. 洛谷 P1466 集合 Subset Sums Label:DP

    题目描述 对于从1到N (1 <= N <= 39) 的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的.举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,每个子 ...

  5. LeetCode "Largest Divisible Subset" !

    Very nice DP problem. The key fact of a mutual-divisible subset: if a new number n, is divisible wit ...

  6. 【USACO 2.2】Subset Sums (DP)

    N (1 <= N <= 39),问有多少种把1到N划分为两个集合的方法使得两个集合的和相等. 如果总和为奇数,那么就是0种划分方案.否则用dp做. dp[i][j]表示前 i 个数划分到 ...

  7. Leetcode 416. Partition Equal Subset Sum

    Given a non-empty array containing only positive integers, find if the array can be partitioned into ...

  8. Leetcode 368. Largest Divisible Subset

    Given a set of distinct positive integers, find the largest subset such that every pair (Si, Sj) of ...

  9. only for equality comparisons Hash Index Characteristics

    http://dev.mysql.com/doc/refman/5.7/en/index-btree-hash.html Hash Index Characteristics Hash indexes ...

  10. ArcGIS制图之Subset工具点抽稀

    制图工作中,大量密集点显示是最常遇到的问题.其特点是分布可能不均匀.数据点比较密集,容易造成空间上的重叠,影响制图美观.那么,如果美观而详细的显示制图呢? Subset Features(子集要素)工 ...

随机推荐

  1. 10、Mybatis之缓存

    10.1.环境搭建 10.1.1.创建新module 创建名为mybatis_cache的新module,过程参考5.1节 10.1.2.创建Mapper接口和映射文件 package org.rai ...

  2. 每日一库:fsnotify简介

    fsnotify是一个用Go编写的文件系统通知库.它提供了一种观察文件系统变化的机制,例如文件的创建.修改.删除.重命名和权限修改.它使用特定平台的事件通知API,例如Linux上的inotify,m ...

  3. 《小白WEB安全入门》02. 开发篇

    @ 目录 初识HTML潜在漏洞 初识CSS潜在漏洞 初识JS潜在漏洞 初识后端潜在漏洞 后端能做什么 后端种类 后端框架 潜在漏洞 本系列文章只叙述一些超级基础理论知识,极少有实践部分 本文涉及到的语 ...

  4. SSM-Mybatis笔记

    目录 Mybatis-9.28 1.简介 1.1.什么是Mybatis 1.2.持久化 1.3.持久层 1.4 为什么需要Mybatis? 2.第一个Mybatis程序 2.1.搭建环境 2.2.创建 ...

  5. Oracle查询--增加--删除--修改主键

    对Oracle表主键的操作,有四类:查询,增加,修改,删除 1.查询主键 /*查询某个表中存在的约束*/ select * from user_constraints where table_name ...

  6. mac应用已损坏无法打开

    sudo xattr -r -d com.apple.quarantine /User/name/yourapp # '/User/name/yourapp' 替换成你自己要安装的 mac 应用地址 ...

  7. 2020 5 17 codeforces

    cf还没结束,就开始写总结了.cf确实是个好东西,能够直接暴露出弱点和增加刷题量.以后还是要多打打的.这次我发现自己的码力还是不行.一个二分都要调好久.唉T1sb题,就是入门用的.题目看不懂...写了 ...

  8. Java-全网最详细反射

    Java-反射 前言 Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象 ...

  9. JVM 学习

    目录 1. 类加载器及类加载过程 1.1 基本流程 1.2 类加载器子系统作用 1.3 类加载器角色 1.4 加载过程 (1) 加载 loading (2) 链接 linking 验证 verify ...

  10. codeforces div1A

    A. Circular Local MiniMax 题目翻译:给我们一个数组(循环的也就是1和n是相邻的),我们可以对数组进行任意调序,对于每个数b[i]要求满足b[i] < b[i - 1] ...