这道题就是给你一n长序列, 然后把这个序列按顺序分成很多段, 每段长s(最前面可以小于s, 只有第一段的后半段, 最后面也同样, 只有最后一段的前半段), 然后要求是每一段里面没有重复的数, 问你有几种分法

实际上看到连续s个数, 就可以想到滑动窗口, 可以提前初始化所给序列的每一段里面有没有重复的数, 然后再枚举第一段的终点, 然后一段一段去判断是否全部都没有重复的数字, 如果所有段都是的话, 那么就符合题目要求, ans++

有两个地方要注意

(1)初始化的问题。这个思路有点像扫描法, 判断每一段的时候, 不用从新开始, 而是从相邻左边的那一段, 把最前面的数字减去和新加的数字加进来就可以了, 利用好前面得出的结果。我一开始每一段都重新算, 然后就超时了

(2)不是完整的段的问题。如果是最前面的那一段, 那么只算序列里面的那一段, 然后最后面的那一段也是只算序列里面的那一段,所以要特别注意, 结尾可以到n + s - 1, 同时保存这个数组空间就要翻倍了。


#include<cstdio>
#include<cstring>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std; const int MAXN = 112345;
int a[MAXN], vis[MAXN], n, s;
bool k[MAXN<<1]; //翻倍 void init()
{
int cnt = 0; //重复数字的个数
memset(k, false, sizeof(k));
memset(vis, 0, sizeof(vis)); vis[a[0]]++;
REP(i, 0, n + s) //一定是n+s
{
k[i] = (cnt == 0);
if(i + 1 < n && ++vis[a[i+1]] == 2) cnt++; //注意这里一定是==2, 因为这代表从1到2, 而不是 > 1
if(i - s + 1>= 0 && --vis[a[i-s+1]] == 1) cnt--; //同上, 代表从2到1。
}
} bool judge(int end)
{
while(1)
{
if(!k[end]) return false;
if(end >= n) return true; //如果到最后的那一段都符合的话, 那就这种情况符合要求
end += s;
}
} int main()
{
int T;
scanf("%d", &T); while(T--)
{
scanf("%d%d", &s, &n);
REP(i, 0, n) scanf("%d", &a[i]);
init(); int ans = 0;
REP(i, 0, s) ans += judge(i);
printf("%d\n", ans);
} return 0;
}

最新文章

  1. C#并发编程
  2. ROS学习(一)—— 环境搭建
  3. Find Peak Element
  4. 应用程序框架实战二十二 : DDD分层架构之仓储(层超类型基础篇)
  5. 微软Dynamics 使用葡萄城的Wijmo 5提供移动端用户界面选择
  6. 4.openstack之mitaka搭建glance镜像服务
  7. c++模板库(简介)
  8. Debug不崩溃Release版本崩溃的一种原因
  9. centos内核优化--转至网络
  10. Toad创建DBLINKsop
  11. H5 App设计者需要注意的21条禁忌
  12. 移动端-弹窗demo
  13. cocos2dx ResolutionPolicy
  14. [计算机网络] vsftpd的安装与使用
  15. ylb:SQLServer常用系统函数-字符串函数、配置函数、系统统计函数
  16. pyqt pyside 设置窗口关闭时删除自身
  17. Git知识
  18. 003_生成器(generator)内部解析
  19. android手势识别ViewFlipper触摸动画
  20. c++-pimer-plus-6th-chapter04

热门文章

  1. 获得a-b的差[返回BigDecimal 类型]
  2. MySQL 关闭 binlog 日志
  3. Django路由中的include
  4. CF482C Game with Strings (状压DP+期望DP)
  5. [LUOGU]3919 【模板】可持久化数组
  6. 四则运算2(最终版)java+jps+sqlServer
  7. 数字签名技术与https
  8. WinServer-IIS初始安装及发布网站
  9. Android实现天气预报温度/气温折线趋势图
  10. leveldb学习:sstable(2)