UVA-12174 Shuffle
来源:互联网 发布:ps4辐射4美女捏脸数据 编辑:程序博客网 时间:2024/05/22 05:24
题目链接:https://vjudge.net/problem/UVA-12174
取一个S长度的区间,用区间法扫描一遍序列,判断是否有冲突,把冲突区间对应的解法标0,最多有S种解法,用一个数组标记就行
判断冲突要用一个数组保存区间中各个歌曲的数量,和一个数保存不同歌曲数量,随着区间移动更新
这样时间复杂度为O(n)
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<queue>#include<map>#include<set>#include<string>using namespace std;typedef long long ll;const int N=1e5+10;int num[N],a[N];bool vis[N];int n,s;int main(){ //freopen("/home/zlwang/Desktop/t2.txt","r",stdin); int T; scanf("%d",&T); while(T--) { scanf("%d%d",&s,&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); int pl=n-1,pr=pl+s,sum=0; //用pl,pr标记区间 memset(vis,true,sizeof(vis)); memset(num,0,sizeof(num)); //保存每首歌在区间中的数量 while(pr>0) { if(pl>=0) { if(num[a[pl]]==0) sum++; //更新区间中不同歌曲数 num[a[pl]]++; } if(pr<n) { num[a[pr]]--; if(num[a[pr]]==0) sum--; } if(min(pr,n)-max(pl,0)!=sum) //判断是否有重复歌曲 { int v=(n-pl)%s; //将对应区间标0 vis[v]=false; } pl--; pr--; } int ans=0; for(int i=0;i<s;i++) //统计可行数 if(vis[i]) ans++; printf("%d\n",ans); } return 0;}
阅读全文
0 0
- UVa 12174 - Shuffle
- Uva - 12174 - Shuffle
- UVa OJ 12174 - Shuffle
- UVA-12174 Shuffle
- UVA - 12174 Shuffle 滑动窗口
- Shuffle UVA
- Shuffle UVA
- UVA 12174 - Shuffle(技巧枚举+预处理)
- uva 12174 - Shuffle(预处理+暴力)
- [算法竞赛入门经典] UVA 12174 - Shuffle
- UVa #12174 Shuffle (例题8-15)
- UVa 12174 - Shuffle(滑动窗口)
- UVa 12174:Shuffle(滑动窗口)
- UVA - 12174 Shuffle 滑动窗口的应用。
- 滑动窗口,预处理(Shuffle,uva 12174)
- 例题8-15 Shuffle的播放记录(Shuffle, ACM/ICPC NWERC 2008, UVa 12174)
- 【高效算法设计——滑动窗口】 UVa 12174 Shuffle
- [较难] UVa OJ 12174 Shuffle 滑动窗口
- scala主构造器的多种玩法
- springboot启动方式
- hashCode与equals详解
- execute、executeQuery和executeUpdate之间的区别
- spring boot学习(三)---Controller
- UVA-12174 Shuffle
- Android APT 技术浅谈
- [回文自动机优化转移] Central Europe Regional Contest 2014 G. Virus synthesis
- centos配置dns服务器
- CDH5.11.2在centos6.4上完整安装分享
- 大数据
- Maven讲解之 依赖管理
- 古老的智力题——奇怪的游戏
- navicat导出csv乱码问题