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

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

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

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

 #include <cstdio>
#include <cstring>
#include <cassert> const int maxn = + ;
int a[maxn], s, n, cnt[maxn * ];
bool ok[maxn * ]; inline bool in(int x) { return x >= && x <= n; } int main()
{
//freopen("in.txt", "r", stdin); int T; scanf("%d", &T);
while(T--)
{
scanf("%d%d", &s, &n);
memset(a, -, sizeof(a));
for(int i = ; i <= n; i++) scanf("%d", &a[i]);
memset(cnt, , sizeof(cnt));
//memset(ok, false, sizeof(ok));
int tot = s;
for(int i = ; i < n + s; i++)
{
if(in(i-s)) { cnt[a[i-s]]--; if(!cnt[a[i-s]]) tot--; }
else tot--;
if(in(i)) { cnt[a[i]]++; if(cnt[a[i]] == ) tot++; }
else tot++;
ok[i] = tot == s;
} int ans = ;
for(int x = -s; x <= ; x++)
{
bool flag = true;
for(int i = x; i < n+s; i += s)
{
if(i <= ) continue;
if(!ok[i]) { flag = false; break; }
}
if(flag)
ans++;
} printf("%d\n", ans);
} return ;
}

代码君

UVa 12174 (滑动窗口) Shuffle的更多相关文章

  1. UVa 11572 (滑动窗口) Unique Snowflakes

    滑动窗口挺有意思的,如果符合条件右端点一直向前走,不符合的话,左端点向前走. #include <bits/stdc++.h> using namespace std; set<in ...

  2. 【uva 12174】Shuffle(算法效率--滑动窗口)

    题意:假设一种音乐播放器有一个乱序的功能,设定每播放S首歌为一个周期,随机播放编号为1~S的歌曲.现在给一个长度为N的部分播放记录,请统计下次随机排序所发生的时间的可能性种数.(1≤S,N≤10000 ...

  3. UVa 12174 Shuffle(滑动窗口)

    https://vjudge.net/problem/UVA-12174 题意: 你在听音乐播放器,它采用随机播放形式.随机播放的原理时先随机产生一个1~n的排列,然后就按这个排列顺序播放歌曲.播放完 ...

  4. UVa 12174 Shuffle (滑动窗口)

    题意:你正在使用的音乐播放器有一个所谓的乱序播放功能,即随机打乱歌曲的播放顺序.假设一共有s首歌, 则一开始会给这s首歌随机排序,全部播放完毕后再重新随机排序.继续播放,依次类推.注意,当s首歌播放完 ...

  5. 12174 - Shuffle——[滑动窗口]

    You are listening to your music collection using the shuffle function to keep the music surprising. ...

  6. 紫书 例题8-15 UVa 12174 (滑动窗口)

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

  7. uva 1606 amphiphilic carbon molecules【把缩写写出来,有惊喜】(滑动窗口)——yhx

    Shanghai Hypercomputers, the world's largest computer chip manufacturer, has invented a new classof ...

  8. UVa 11572 Unique snowflakes【滑动窗口】

    题意:给出 n个数,找到尽量长的一个序列,使得该序列中没有重复的元素 看的紫书,滑动窗口来做的 当右端碰到有相同的数的时候,左端向前滑动一个数 模拟一个样例好理解些 #include<iostr ...

  9. Uva - 12174 - Shuffle

    用滑动窗口的思想,用一个数组保存每个数在窗口中出现的次数.再用一个变量记录在窗口中恰好出现一次的的数的个数,这样可以枚举所有可能的答案,判断它所对应的所有串口,当且仅当所有的串口均满足要求时这个答案可 ...

随机推荐

  1. 疯狂java讲义——初始化块

  2. mysql SQLyog导入导出csv文件

    1.选择数据库表 --> 右击属性 --> 备份/导出 --> 导出表数据作为 --> 选择cvs --> 选择下面的“更改” --> 字段 --> 变量长度 ...

  3. Dungeon Game

    The demons had captured the princess (P) and imprisoned her in the bottom-right corner of a dungeon. ...

  4. 分布式数据存储-MySQL主从复制

    前言 一.主从复制过程 MySQL的主从复制能力是通过三个线程来实现的,两个在Slave端的I/O和SQL两个线程,还有一个在Master端I/O线程: Binlog dump thread:Mast ...

  5. HDU 4493 Tutor(精度处理)

    题目 #include<stdio.h> int main() { int t; double a,s; scanf("%d",&t); while(t--) ...

  6. POJ 1422

    #include <iostream> #define MAXN 350 using namespace std; int mat[MAXN][MAXN]; bool mark[MAXN] ...

  7. jquery mobile的学习资料

    磨刀不误砍柴工!想要学的快就得有好的资源.jquery mobile只是jquery的一个插件,所以相对简单易学.只要有jquery的基础就好.如果想修改东西的话,那么需要的知识就相对较多了. 书 & ...

  8. Android View体系

  9. poj 1062(有限制的最短路)

    题目链接:http://poj.org/problem?id=1062 思路:要求对于最短路上的点,不能出现等级之差大于m,于是我们可以枚举,假设酋长的等级为level,于是这个区间范围[level- ...

  10. lintcode:买卖股票的最佳时机 I

    买卖股票的最佳时机 假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格.如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润. 样例 给出一个数组样例 [3,2,3 ...