题目链接:https://nanti.jisuanke.com/t/15769

  题意是求可以变换位置以后相同的子串有多少个,那么做法是只要每个数字的平方和,立方和以及四次方和都相同就可以了。

  代码如下:

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;
typedef long long LL;
typedef pair <LL, LL> PII;
const int N = 5e4 + ;
const int M = 1e5 + ;
const int DX = ;
int n, m;
LL s[N], pre2[N], pre3[N], pre4[N];
int vism[M];
int mp[M];
LL mm2[M], mm3[M], mm4[M];
int len[M];
LL nn[][N];
int tot;
int main(){
scanf("%d", &n);
for(int i = ; i <= n; ++ i){
scanf("%lld", &s[i]);
pre2[i] = pre2[i-] + s[i]*s[i];
pre3[i] = pre3[i-] + s[i]*s[i]*s[i];
pre4[i] = pre4[i-] + s[i]*s[i]*s[i]*s[i];
}
scanf("%d", &m);
LL t;
for(int i = ; i <= m; ++ i){
scanf("%d", &len[i]);
vism[len[i]] = ;
for(int j = ; j < len[i]; ++ j){
scanf("%lld", &t);
mm2[i] += t*t;
mm3[i] += t*t*t;
mm4[i] += t*t*t*t;
}
}
for(int i = ; i < M; ++ i){
if(vism[i]){
for(int j = i; j <= n; ++ j){
nn[tot][j-i] = (((pre4[j] - pre4[j-i]) << DX) << DX) + ((pre3[j] - pre3[j-i]) << DX) + (pre2[j] - pre2[j-i]);
}
sort(nn[tot], nn[tot] + n-i+);
mp[i] = tot ++;
}
}
LL tmp, p;
for(int i = ; i <= m; ++ i){
tmp = ((mm4[i] << DX) << DX) + (mm3[i] << DX) + mm2[i];
p = mp[len[i]];
printf("%d\n", upper_bound(nn[p], nn[p]+n-len[i]+, tmp) - lower_bound(nn[p], nn[p]+n-len[i]+, tmp));
}
}

  需要注意的是,所有串的长度不超过2e5,那么tot的个数不会太多,因为不同长度种类的个数从1开始,那么到不了几百,他们的累和就会超过2e5,因此,以上算法在时间和空间上都能够承受。同时需要注意的是,仓鼠说这题卡map,因此用sort过。

最新文章

  1. 【Win10 应用开发】人脸识别
  2. #define宏定义形式的&quot;函数&quot;导致的bug
  3. 接入百度语音SDK的步骤
  4. Aforge.net之旅——开篇:从识别验证码开始
  5. jquery插件之表格隔行变色并鼠标滑过高亮显示
  6. visual studio code + Nodejs + Typescritpt + angularjs2 + bootstrap 环境搭建/Elementary os
  7. H-Basis/SG/SH GI Relighting
  8. 自学 iOS – 三十天三十个 Swift 项目
  9. mvn常见命令
  10. 最全的JAVA源码整合下载
  11. hdu 1690 The Balance_母函数
  12. [置顶] Android系统移植与调试之-------&gt;如何修改Android设备状态条上音量加减键在横竖屏的时候的切换与显示
  13. find指令
  14. javaWeb学习总结(11)- 监听器(Listener)在开发中的应用
  15. 201521123080《Java程序设计》第6周学习总结
  16. 认识Json解析json生成json
  17. 开放接口/RESTful/Api服务的设计和安全方案详解
  18. AngularJS:directive自定义的指令
  19. Python推荐系统库--Surprise理论
  20. opencv学习之路(22)、轮廓查找与绘制(一)

热门文章

  1. DotNet 使用阿里云媒体转码服务
  2. webstrom设置语句中的分号
  3. 使用Feign通过服务名调用服务,找不到服务
  4. oracle的LAST_DAY()函数
  5. 如何在SAP云平台ABAP编程环境里把CDS view暴露成OData服务
  6. Nginx的反向代理和负载均衡服务
  7. input 框自动检测输入是否为数字
  8. Django中使用JWT
  9. Linux命令——set 和 unset
  10. 稀疏矩阵在Python中的表示方法