UVA12174_Shuffle
Shuffle
大致题意:
你有一个随机播放的播放器,有s首歌,在这s首播放完之前不会重新打乱顺序,现在给出一段只含有1~s的n长度序列,现在问你下次随机排序发生的时间有多少种可能
其实就是问你这个播放记录的起点有多少种可能
思路:
先暴力枚举一下开头s个字符分别为起点,然后验证这样是否合法
这样关注的焦点就是如何检验了,暴力显然不行,那么我们就预处理所有可以是一段记录播放起点的点(也就是含这个点后s个字符各不相同),那么检验最开始s个分别是否为合法起点的时候就只要不断枚举他后面第s为起点是否合法就行了,
现在问题又转移到如何知道s个连续序列是否都不相同了,这个就和滑动窗口很像了,
我们只要记录s个字符每个字符的的出现次数和有多少个不同字符串就行了,如果有s个不同字符串就能为起点,每次转移时间区间整体右移一个单位,那么变化的是原来区间的最左端和最右端+1的个数,如果有计数变成1则出现新字符,如果变成0则失去了一个字符
这个程序有一个小技巧,就是在n字符前面添加s个作为形式起点
但这样写出现bug了,原因是我默认n>=s了,而且最后s个字符和最初s个字符不能使用是否有s个不同的字符来检验合法性了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<queue>
#include<cstdlib>
#include<algorithm>
#include<stack>
#include<map>
#include<queue>
#include<vector> using namespace std;
const int maxn = 3e5+100;
#define pr(x) cout << #x << " = " << x << " ";
#define prln(x) cout << #x << " = " << x <<endl;
#define ll long long
int x[maxn], ok[maxn], cnt[maxn], s, n;
int main(){
#ifdef LOCAL
freopen("C:\\Users\\User Soft\\Desktop\\in.txt","r",stdin);
//freopen("C:\\Users\\User Soft\\Desktop\\out.txt","w",stdout);
#endif
int t;cin >> t;
while(t--) {
cin >> s >> n;
memset(x, -1, sizeof x);
memset(cnt, 0, sizeof cnt);
memset(ok, 0, sizeof ok);
for(int i = 0; i < n; ++i) {
scanf("%d", x + s + i);
}
int tot = 0;
for(int i = 0; i < n + s; ++i) {
if(tot == s) ok[i] = true;
if(i < s && tot == i) ok[i] = true;
if(i > n && n + s - i == tot) ok[i] = true; if(x[i] != -1 && --cnt[x[i]] == 0) --tot;
if(x[i + s] != -1 && cnt[x[i + s]]++ == 0) ++tot;
}
int ans = 0;
for(int i = 0; i < s; ++i) {
int flag = 1;
for(int j = i; j < n + s; j+= s) {
if(!ok[j]) {
flag = 0;
break;
}
}
ans += flag;
}
if(ans == n + 1) ans = s;
cout << ans << endl;
}
return 0;
}
UVA12174_Shuffle的更多相关文章
随机推荐
- Day9---Python的集合类
集合类 1.生成办法: 可使用{.....} 或者set()生成集合,例如 a = {23,214,34,324,234,34} #这里的集合就是数学上的集合a = set('dsfasfsdf') ...
- 解决MySQL在导入大文件时候,出现MySQL Server has gone away的问题
编辑/etc/my.cnf文件,在[myslqd]节点,添加 max_allowed_packet = 64M 随后重启MySQL即可.
- JS-04 JS中的函数都是按值传递的
JS中的函数都是按值传递的 1.传递参数是基本类型 如例子:基本类型传入函数后,函数内部参数生成一个参数副本,把num变量的值赋给num参数,num参数再去参与函数中的运算,但不会影响外面num变量的 ...
- ApacheHttpServer修改httpd.conf配置文件
转自:https://blog.csdn.net/dream1120757048/article/details/77427351 1. 安装完 Apache HTTP Server 之后,还需要修改 ...
- 转载一篇别人分享的VSFTPD.CONF的中文解释方便以后查询
# 服务器以standalong模式运行,这样可以进行下面的控制 listen=YES # 接受匿名用户 anonymous_enable=YES # 匿名用户login时不询问口令 no_anon_ ...
- 机器学习-线性回归补充-R^
线性回归算法在选自变量会遇到两个问题:一是去掉多重共线性干扰,二是选择最优自变量组合. 线性回归步骤 1.选择自变量 注意点 去掉多重共线性干扰,选择最优自变量组合.这里需要理解决定系数:R^.它是理 ...
- nginx下TP3.2访问页面总是404
这是我测试onethink用的配置 可以参考一下 server { listen 80; server_name onethink.dev www.onethink.dev; root /vagran ...
- Kotlin定义静态变量、静态方法
Kotlin定义静态变量.静态方法kotlin定义静态变量.方法可以采用伴生对象companion object的方式. 经典例子,实例化Fragment. java写法: public class ...
- jmeter 参数化1_User Parameters(用户参数)
参数化:是自动化测试脚本的一种常用技巧,可将脚本中的某些输入使用参数来代替,如登录时利用GET/POST请求方式传递参数的场景,在脚本运行时指定参数的取值范围和规则. 脚本在运行时,根据需要选取不同的 ...
- Kettle数据同步速度调优记录
Msyql到Vertica 1.mysql中在openshop 数据库中选择其中一个300W左右数据的表 create table ip_records_tmp_01 AS SELECT * FROM ...