2023河南省赛组队训练赛(四) - Virtual Judge (vjudge.net)

约瑟夫最近开发了一款名为Pandote的编辑软件,现在他正在测试,以确保它能正常工作,否则,他可能会被解雇!Joseph通过实现对Pandote上字符串的复制和粘贴以及反向操作开始了他的测试。更具体地说,在每一步中,如果屏幕上的字符串是S,他将按顺序进行以下操作。1. 选择长度为l(1≤l≤IS)的前缀,则S可表示为AB (IA] = 1),注意字符串B可以为空。2. 交换这两个部分,得到字符串BA。3.反转整个字符串,得到字符串(BA)"但是,由于Pandote的功能有限,他在每一步中只能选择长度不同的前缀l1和l2。现在Joseph想知道他是否可以通过几个(可能是零)步骤将字符串S转换为T。输入输入的第一行给出了测试用例的数量T (1 <T <5 × 105)。接下来是T测试用例。对于每个测试用例,第一行包含字符串S,第二行包含字符串T。S和T都由小写拉丁字母和[S] = ITI组成。第三行包含两个整数l1和l2(1≤l1, l2≤IS1, l1 # 12),表示每一步可以选择的前缀长度。保证所有测试用例的|S]之和不超过5 × 105。

Sample 1

Inputcopy Outputcopy
3
ljhelloh
hellohlj
2 4
thisisastr
htrtsasisi
3 5
abcde
bcdea
1 4
yes
no
yes

 题解:
我们通过枚举样例可以发现如果连续两个l1或l2操作,原字符串是不变的

(假设l1 > l2)

并且如果进行(l1,l2)

相当于把字符串向左(先l1后 l2) l1 - l2个单位

或向右移动(先l2 后l1) l1 - l2个单位

那么最终答案只可能会是

(l1,l2),l1,l2...  只在原字符串上进行向左或向右移动

l1,(l1,l2),(l1,l2)...  先进行一次l1,再同上

l2,(l1,l2),(l1,l2)...   先进行一次l2,在同上

由于我们要找循环节,所以字符串都变成二倍长度

然后哈希三种情况,看字符串T是否在三种情况中出现过

#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<vector>
#include<map>
#include<queue>
#include<set>
using namespace std;
#define int long long
const int N = 4e6 + 10;
typedef pair<int, int> PII;
string s,s1,s2,c;
int n,m,a,b;
int h1[N],h2[N],h[N],p[N];
int x = 133331;
int mod = 1e9 + 7;
int res;
int get(int h[],int l,int r)
{return (h[r] - h[l-1]*p[r-l+1]%mod + mod)%mod;
}
int check(int l,int r)
{if(get(h,l,r) == res)return 1;if(get(h1,l,r) == res)return 1;if(get(h2,l,r) == res)return 1;return 0;}
void solve()
{cin >> s >> c >> a >> b;n = s.size();s1 = s.substr(a) + s.substr(0,a);reverse(s1.begin(),s1.end());s2 = s.substr(b) + s.substr(0,b);reverse(s2.begin(),s2.end());s = s + s;s = " " + s;s1 = s1 + s1;s1 = " " + s1;s2 = s2 + s2;s2 = " " + s2;c = " " + c;res = 0;p[0] = 1;for(int i = 1;i <= 2*n;i++){p[i] = (p[i-1]*x%mod);h[i] = (h[i-1]*x%mod + s[i])%mod;h1[i] = (h1[i-1]*x%mod + s1[i])%mod;h2[i] = (h2[i-1]*x%mod + s2[i])%mod;if(i <= n)res = (res*x%mod + c[i])%mod;}if(a < b)swap(a,b);for(int i = 1,j = 1;j <= n;j++){if(check(i,i+n - 1)){cout <<"yes\n";return  ;}i = i + n - a + b;if(i >= n + 1){i = i%(n);if(!i)i = n;}}for(int i = 1,j = 1;j <= n;j++){if(check(i,i+n - 1)){cout <<"yes\n";return  ;}i = i + a - b;if(i >= n + 1){i = i%(n);if(!i)i = n;}}cout <<"no\n";
}signed main()
{
//  ios::sync_with_stdio(0);
//  cin.tie(0);cout.tie(0);int t = 1;cin >> t;
//scanf("%lld",&t);while (t--) {solve();}
}
//3 F
//5 B
//6 F
//9 F
//10 B
//12 F
//15 FB
//18 FB

L - Let‘s Swap(哈希 + 规律)相关推荐

  1. 请编程输出如下规律的N*N方阵。*UUUUUUUU*L*UUUUUU*RLL*UUUU*RRLLL*UU*RRRLLLL**RRRRLLLL**RRRRLLL*D

    ###方阵 请编程输出如下规律的N*N方阵.(此题由黄玉妍老师提供) *UUUUUUUU* L*UUUUUU*R LL*UUUU*RR LLL*UU*RRR LLLL**RRRR LLLL**RRRR ...

  2. 【学术篇】规律选手再次证明自己(舒老师的胡策题 T2 LX还在迷路)

    只要你不强制在线, 我就能分块. --Reflash 就算你强制在线, 我还是要分块. --Enzymii 今天做了一波舒老师的毒瘤题, T1据说很水但是没思路所以直接放掉了.. 去看了看T2好像可以 ...

  3. 学习超大神经网络,CPU超越V100 GPU,靠的居然是哈希?

    机器之心报道 机器之心编辑部 训练一亿参数量的全连接网络,44 核心 CPU 让 V100 甘拜下风,靠的居然是--哈希? 深度学习模型的训练和推理加速近来是研究领域关注的重点.虽然普遍观点认为,GP ...

  4. 哈希表(散列表)的介绍,代码实现

    百度百科介绍的哈希表: 哈希表(Hash table,也叫散列表):是根据键(Key)而直接访问在内存存储位置的数据结构.也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访 ...

  5. Ubuntu增加(swap)交换分区

    2019独角兽企业重金招聘Python工程师标准>>> Ubuntu增加(swap)交换分区 内存512M.装的 vpn,lamp,在用vpn时会断线,原来是内存不足引起的.加入sw ...

  6. poj 3257(哈希+二维dp)

    题意:要连出一个从1-L的过山车线,给出n段可选的建设方案.每段都有起始位置,终止位置,代价,和乐趣程度.要实现1-L的长度中,相邻两端要首尾相连,总建设代价控制在B之内,问最多能获得多少乐趣程度. ...

  7. 《Effective C++》item25:考虑写出一个不抛异常的swap函数

    std::swap()是个很有用的函数,它可以用来交换两个变量的值,包括用户自定义的类型,只要类型支持copying操作,尤其是在STL中使用的很多,例如: int main(int argc, _T ...

  8. 数据结构学习笔记(七):哈希表(Hash Table)

    目录 1 哈希表的含义与结构特点 1.1 哈希(Hash)即无序 1.2 从数组看哈希表的结构特点 2 哈希函数(Hash Function)与哈希冲突(Hash Collision) 2.1 哈希函 ...

  9. linux增加分区swap,linux中Centos7增加swap分区详解

    注意:(Redhat5官方推荐) RAM<=4G,swap=2G;RAM>4G,<16G,swap=4G;RAM>16G,<64G,swap=8G;RAM>64G, ...

最新文章

  1. flink入门_阿里巴巴为何选择Flink?20年大佬分11章讲解Flink从入门到实践!
  2. CTF-python-trade-加密的逆写
  3. 本体开发方法——the Method of Ontology Development
  4. 2018-2019-20172329 《Java软件结构与数据结构》第九周学习总结
  5. python元组的定义方式_学习Python元组,有哪些必须要掌握的内容
  6. macbook视频格式转换_AnyMP4简易视频格式转换器 for mac | MAC之家
  7. linux谁使用内存,linux内存不知被谁用了
  8. django 获取环境变量_python – django settings.py os.environ.get(“X”)没有获取正确的值...
  9. C++基础::Stream
  10. Unity直接调用Python脚本
  11. 古建筑测绘任重道远,三维实景建模是唯一突破口?
  12. 6-9.添加HLSL镜面高光
  13. 前端面试题 Doctype作用是什么?严格模式与混杂模式如何区分?他们之间有何意义?
  14. gin embed打包静态资源文件
  15. alpha测试和beta测试
  16. 【中亦安图】Oracle内存过度消耗风险提醒(6)
  17. Java Stream 流常用方法 lambda 表达式实现交集、并集、差集、去重复并集等
  18. Winform开发框架之介绍
  19. 33复杂美:一文看懂加密算法为何物
  20. java代码异常处理会影响性能_编写高质量代码改善java程序的151个建议——[110-117]异常及Web项目中异常处理...

热门文章

  1. 腾讯开源神器Get,程序员也能成为视频剪辑大师
  2. 不中听的意见,不想采纳怎么办?
  3. 使用线性分类器探针理解中间层—Understanding intermediate layers using linear classifier probes
  4. css写不规则三角形
  5. airpods pro是按压还是触摸_airpodspro触摸区域在哪里
  6. SQL(一)创建数据库
  7. Docker Host创建swarm overlay网络
  8. 设计模式【8】-- 手工耿教我写装饰器模式
  9. 为CSDN添加打赏收钱功能
  10. wpf和wp7版网络音乐播放器,使用虾米网的资源