首先预处理一下以每个数为结尾的前s个数是否能构成一个1~s的排列。

可以用cnt数组来记录每个数出现的次数和用一个变量记录一共有多少个不同的数出现。

然后枚举每种可能的情况,也就是枚举第一首歌会出现的位置,注意要考虑到不完整的序列。

代码不长,但是那个ok数组写起来有点蛋疼,因为要考虑到不完整序列的存在,改了好久才改对。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cassert>
 4
 5 const int maxn = 100000 + 10;
 6 int a[maxn], s, n, cnt[maxn * 2];
 7 bool ok[maxn * 3];
 8
 9 inline bool in(int x) { return x >= 1 && x <= n; }
10
11 int main()
12 {
13     //freopen("in.txt", "r", stdin);
14
15     int T; scanf("%d", &T);
16     while(T--)
17     {
18         scanf("%d%d", &s, &n);
19         memset(a, -1, sizeof(a));
20         for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
21         memset(cnt, 0, sizeof(cnt));
22         //memset(ok, false, sizeof(ok));
23         int tot = s;
24         for(int i = 1; i < n + s; i++)
25         {
26             if(in(i-s)) { cnt[a[i-s]]--; if(!cnt[a[i-s]]) tot--; }
27             else tot--;
28             if(in(i)) { cnt[a[i]]++; if(cnt[a[i]] == 1) tot++; }
29             else tot++;
30             ok[i] = tot == s;
31         }
32
33         int ans = 0;
34         for(int x = 1-s; x <= 0; x++)
35         {
36             bool flag = true;
37             for(int i = x; i < n+s; i += s)
38             {
39                 if(i <= 0) continue;
40                 if(!ok[i]) { flag = false; break; }
41             }
42             if(flag)
43                 ans++;
44         }
45
46         printf("%d\n", ans);
47     }
48
49     return 0;
50 }

代码君

转载于:https://www.cnblogs.com/AOQNRMGYXLMV/p/4431824.html

UVa 12174 (滑动窗口) Shuffle相关推荐

  1. 滑动窗口(预处理)+输入特殊一般化处理技巧(UVA-12174)

    苦酒入喉心作痛.. 今天下午和晚上一直在等着APMCM出结果,没想到最后竟然白给了,,恨啊 我们提交的论文肯定在平均水平之上的,但竟然连百分之五十的获奖率都没进入,属实是有些离谱. 不过人生嘛,肯定是 ...

  2. NumPy迎来重大版本更新,新增函数注释、滑动窗口视图功能,仅支持Python 3.7以上版本...

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 杨净 发自 凹非寺    来自 | 量子位 最近,NumPy上线了最新版本--NumP ...

  3. [LSTM]时间序列预测存在的问题--滑动窗口是一把双刃剑【持续更新】

    [想直接进入结果的请直接从右侧目录点击去看 解决方案 和 如何评估时序模型的泛化能力] 期待你提出宝贵的意见. 注1:本文仅仅展示思路和最基础的代码.欢迎提出您的宝贵意见. 注2:本文展示的可视化图形 ...

  4. 入门经典_Chap08_题解总结:极角扫描法 滑动窗口 单调队列 单调栈

    总结  本章主要关注一个重要的问题 – 单调队列和单调栈的使用  同时还有一些其他的问题,如扫描法,递归的思想, 构造, 分治, 二分等 知识点 单调队列 和 单调栈 题目 UVA - 1606 Am ...

  5. leetcode 30. Substring with Concatenation of All Words 与所有单词相关联的字串 滑动窗口法

    题目描述 给定一个字符串 s 和一些长度相同的单词 words.在 s 中找出可以恰好串联 words 中所有单词的子串的起始位置. You are given a string, s, and a ...

  6. leetcode 567. Permutation in String 字符串的排列 滑动窗口法

    题目 给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列.换句话说,第一个字符串的排列之一是第二个字符串的子串. 示例1:输入: s1 = "ab" s ...

  7. leetcode Longest Substring with At Most Two Distinct Characters 滑动窗口法

    题目解析 代码如下 题目解析 这一题是一道会员的题目,题目介绍如下: Given a string, find the length of the longest substring T that c ...

  8. leetcode 3. Longest Substring Without Repeating Characters 最长非重复子串的长度 滑动窗口法

    题目链接 根据我们之前介绍的滑动窗口法的解法: 滑动窗口法详解 leetcode 438. Find All Anagrams in a String 滑动窗口法 这题,我们不难解决,使用之前的模板. ...

  9. leetcode 438. Find All Anagrams in a String 滑动窗口法

    题目链接 解析 主要使用滑动窗口法解题,需要好好体会的是中间的两个判断couter的用法,这里很巧妙. 如果想了解更多的滑动窗口法内容,看这里: 滑动窗口法详解 代码 from collections ...

  10. 2021年大数据Flink(二十):案例二 基于数量的滚动和滑动窗口

    目录 案例二 基于数量的滚动和滑动窗口 需求 代码实现 案例二 基于数量的滚动和滑动窗口 需求 需求1:统计在最近5条消息中,各自路口通过的汽车数量,相同的key每出现5次进行统计--基于数量的滚动窗 ...

最新文章

  1. Tornado,展示一下模板渲染
  2. 设计模式理解:装饰模式Decorator
  3. 计算机教师教学心得体会,信息技术教师教学的一点体会
  4. 2019.7.29学习整理python
  5. stm32使用DAP下载程序
  6. 剑指offer python实现_剑指offer系列python实现 日更(三)
  7. struts配置访问后缀为.do,.action,.*
  8. python使用redis有序集合_Redis 有序集合(sorted set)
  9. excel中如何添加下拉选择框
  10. window.parent.document jquery
  11. 关于PCB板设计中电阻电容等封装的选择
  12. java 打包加密_java打包、加密、发布(源代码保护)
  13. ROS节点运行管理launch文件
  14. BigDecimal的equals方法做等值比较问题
  15. 支付网关和api网关_什么是支付网关
  16. 3.8 main.js-常用配置【uni-app教程uniapp教程(黄菊华-跨平台开发系列教程)】
  17. PMP-五大项目管理过程组
  18. JAVA的sdn控制器,RG-ONC锐捷智能开放网络SDN控制器
  19. Python模拟鼠标键盘:pykeyboard库的使用
  20. Fenix:Mozilla推出的新型移动浏览器

热门文章

  1. HBase-存储-HFile格式
  2. 多因子策略介绍与应用
  3. 软件测试——第三次作业
  4. css选择器思维导图
  5. python-format函数
  6. Mimikatz 攻防杂谈
  7. FuelPHP 系列(三) ------ Model 模型
  8. 利用微软AntiXss Library过滤输出字符,防止XSS攻击
  9. Scrum Meeting 2 (2016-12-19 Mon)
  10. 使用fastjson读取超巨json文件引起的GC问题