博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVa 12174 - Shuffle
阅读量:4073 次
发布时间:2019-05-25

本文共 883 字,大约阅读时间需要 2 分钟。

【题目大意】

你在听音乐播放器,它采用随机播放形式。随机播放的原理时先随机产生一个1~n的排列,然后就按这个排列顺序播放歌曲。播放完这序列的所有歌曲以后,再次随机生成一个1~n的排列,再继续播放。

现在给你一个播放历史记录,这个历史记录是不完整的,以为它是开始记录时,已经有些歌曲播放过了而没有记录到。

现在给你一段从某个时刻开始的播放音乐的历史记录,以及播放器里一共有多少首歌。

问历史记录中第一首歌可能是某个随机列表中的第几首,总共有多少种可能?

【思路】

先进行预处理,用一个bool数组ok记录,ok【i】表示以第i个位置开始的连续s个数是不是都不相同的。

然后一次枚举第一首歌是第x首,先检查前s-x首歌是不是都不相同,这个也可以先预处理判断。

之后从第x开始,判断x,x+s,x+2*s……是不是都满足条件即可。

 【代码】

/* * * UVa 12174 - Shuffle * */#include
#include
#include
using namespace std;typedef long long int64;const int INF = 0x3f3f3f3f;const int MAXN = 100010;int s, n;int arr[MAXN];int cnt[MAXN];bool first[MAXN], ok[MAXN];// 预处理inline void init(){ memset(first, 0, sizeof(first)); memset(ok, 0, sizeof(ok)); memset(cnt, 0, sizeof(cnt)); first[0] = true; int i; for(i=0; i
=0; --i){ if(cnt[arr[i]]++ == 0){ ++count; } if(count == s || n-i

转载地址:http://wpzni.baihongyu.com/

你可能感兴趣的文章
SSH原理与运用
查看>>
SIGN UP BEC2
查看>>
S3C2440中对LED驱动电路的理解
查看>>
《天亮了》韩红
查看>>
Windows CE下USB摄像头驱动开发(以OV511为例,附带全部源代码以及讲解) [转]
查看>>
出现( linker command failed with exit code 1)错误总结
查看>>
iOS开发中一些常见的并行处理
查看>>
iOS获取手机的Mac地址
查看>>
ios7.1发布企业证书测试包的问题
查看>>
如何自定义iOS中的控件
查看>>
iOS 开发百问
查看>>
Mac环境下svn的使用
查看>>
github简单使用教程
查看>>
如何高效利用GitHub
查看>>
环境分支-git版本管理
查看>>
uni-app 全局变量
查看>>
java 不用递归写tree
查看>>
springboot2 集成Hibernate JPA 用 声明式事物
查看>>
fhs-framework jetcache 缓存维护之自动清除缓存
查看>>
SpringBoot 动态编译 JAVA class 解决 jar in jar 的依赖问题
查看>>