[USACO2022OPEN S] Subset Equality S
[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的更多相关文章
- 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 ...
- [LeetCode] Partition Equal Subset Sum 相同子集和分割
Given a non-empty array containing only positive integers, find if the array can be partitioned into ...
- [LeetCode] Largest Divisible Subset 最大可整除的子集合
Given a set of distinct positive integers, find the largest subset such that every pair (Si, Sj) of ...
- 洛谷 P1466 集合 Subset Sums Label:DP
题目描述 对于从1到N (1 <= N <= 39) 的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的.举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,每个子 ...
- LeetCode "Largest Divisible Subset" !
Very nice DP problem. The key fact of a mutual-divisible subset: if a new number n, is divisible wit ...
- 【USACO 2.2】Subset Sums (DP)
N (1 <= N <= 39),问有多少种把1到N划分为两个集合的方法使得两个集合的和相等. 如果总和为奇数,那么就是0种划分方案.否则用dp做. dp[i][j]表示前 i 个数划分到 ...
- Leetcode 416. Partition Equal Subset Sum
Given a non-empty array containing only positive integers, find if the array can be partitioned into ...
- Leetcode 368. Largest Divisible Subset
Given a set of distinct positive integers, find the largest subset such that every pair (Si, Sj) of ...
- 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 ...
- ArcGIS制图之Subset工具点抽稀
制图工作中,大量密集点显示是最常遇到的问题.其特点是分布可能不均匀.数据点比较密集,容易造成空间上的重叠,影响制图美观.那么,如果美观而详细的显示制图呢? Subset Features(子集要素)工 ...
随机推荐
- 10、Mybatis之缓存
10.1.环境搭建 10.1.1.创建新module 创建名为mybatis_cache的新module,过程参考5.1节 10.1.2.创建Mapper接口和映射文件 package org.rai ...
- 每日一库:fsnotify简介
fsnotify是一个用Go编写的文件系统通知库.它提供了一种观察文件系统变化的机制,例如文件的创建.修改.删除.重命名和权限修改.它使用特定平台的事件通知API,例如Linux上的inotify,m ...
- 《小白WEB安全入门》02. 开发篇
@ 目录 初识HTML潜在漏洞 初识CSS潜在漏洞 初识JS潜在漏洞 初识后端潜在漏洞 后端能做什么 后端种类 后端框架 潜在漏洞 本系列文章只叙述一些超级基础理论知识,极少有实践部分 本文涉及到的语 ...
- SSM-Mybatis笔记
目录 Mybatis-9.28 1.简介 1.1.什么是Mybatis 1.2.持久化 1.3.持久层 1.4 为什么需要Mybatis? 2.第一个Mybatis程序 2.1.搭建环境 2.2.创建 ...
- Oracle查询--增加--删除--修改主键
对Oracle表主键的操作,有四类:查询,增加,修改,删除 1.查询主键 /*查询某个表中存在的约束*/ select * from user_constraints where table_name ...
- mac应用已损坏无法打开
sudo xattr -r -d com.apple.quarantine /User/name/yourapp # '/User/name/yourapp' 替换成你自己要安装的 mac 应用地址 ...
- 2020 5 17 codeforces
cf还没结束,就开始写总结了.cf确实是个好东西,能够直接暴露出弱点和增加刷题量.以后还是要多打打的.这次我发现自己的码力还是不行.一个二分都要调好久.唉T1sb题,就是入门用的.题目看不懂...写了 ...
- Java-全网最详细反射
Java-反射 前言 Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象 ...
- JVM 学习
目录 1. 类加载器及类加载过程 1.1 基本流程 1.2 类加载器子系统作用 1.3 类加载器角色 1.4 加载过程 (1) 加载 loading (2) 链接 linking 验证 verify ...
- codeforces div1A
A. Circular Local MiniMax 题目翻译:给我们一个数组(循环的也就是1和n是相邻的),我们可以对数组进行任意调序,对于每个数b[i]要求满足b[i] < b[i - 1] ...