Uva12174】的更多相关文章

题意: 你正在使用的音乐播放器有一个所谓的乱序功能,即随机打乱歌曲的播放顺序.假设一共有s首歌,则一开始会给这s首歌随机排序,全部播放完毕后再重新随机排序.继续播放,依此类推.注意,当s首歌播放完毕之前不会重新排序.这样,播放记录里的每s首歌都是1-s的一个排列.给出一个长度为n(1≤s,n≤100000)的播放记录(不一定是从最开始记录的),你的任务是统计下次随机排序所发生的时间有多少种可能性.例如,s=4,播放记录是3, 4, 4, 1, 3, 2, 1, 2, 3, 4,不难发现只有一种可…
$play[i]$表示以$i$这个点结束的连续$s$个播放记录是否是无重复的,这样最后只需要枚举可能的播放时间,然后检查对应的播放区间是否是单独的就可以了.特殊情况是,出现的所有播放记录无重复,且长度小于等于$s$,这种情况,答案就是$s$. AC代码 #include <stdio.h> #include <string.h> + ; int play[maxn], re[maxn], cnt[maxn]; int main() { int n, s, T; scanf(&quo…
#include <bits/stdc++.h> using namespace std; ; int t; int s,n; ]; ]; ]; void init(){ memset(a, , sizeof(a)); memset(res, , sizeof(res)); memset(flag, , sizeof(flag)); } int main(){ //freopen("a.txt", "w", stdout); scanf("%d…
注意理解题意,不是排列种类,而是下一个排序出现的时间滑动窗口,具体见代码,写了很多注释(紫书的思路1理解有点麻烦...)注:可以画一个轴来方便理解 #include<iostream> #include<vector> using namespace std; + ; ], cnt[maxn], ok[maxn*]; int main() { int T; cin >> T; while(T--) { cin >> s >> n; // add…
https://vjudge.net/problem/UVA-12174 题意: 你在听音乐播放器,它采用随机播放形式.随机播放的原理时先随机产生一个1~n的排列,然后就按这个排列顺序播放歌曲.播放完这序列的所有歌曲以后,再次随机生成一个1-n的排列,再继续播放. 现在给你一个播放历史记录,这个历史记录是不完整的,以为它是开始记录时,已经有些歌曲播放过了而没有记录到. 现在给你一段从某个时刻开始的播放音乐的历史记录,以及播放器里一共有多少首歌. 问历史记录中第一首歌可能是某个随机列表中的第几首,…