CF1120 A. Diana and Liana
Description
At the first holiday in spring, the town Shortriver traditionally conducts a flower festival. Townsfolk wear traditional wreaths during these festivals. Each wreath contains exactly k flowers.
The work material for the wreaths for all n citizens of Shortriver is cut from the longest flowered liana that grew in the town that year. Liana is a sequence a1, a2, ..., am, where ai is an integer that denotes the type of flower at the position i. This year the liana is very long (m≥n⋅k), and that means every citizen will get a wreath.
Very soon the liana will be inserted into a special cutting machine in order to make work material for wreaths. The machine works in a simple manner: it cuts k flowers from the beginning of the liana, then another k flowers and so on. Each such piece of k flowers is called a workpiece. The machine works until there are less than k flowers on the liana.
Diana has found a weaving schematic for the most beautiful wreath imaginable. In order to weave it, k flowers must contain flowers of types b1, b2, ..., bs, while other can be of any type. If a type appears in this sequence several times, there should be at least that many flowers of that type as the number of occurrences of this flower in the sequence. The order of the flowers in a workpiece does not matter.
Diana has a chance to remove some flowers from the liana before it is inserted into the cutting machine. She can remove flowers from any part of the liana without breaking liana into pieces. If Diana removes too many flowers, it may happen so that some of the citizens do not get a wreath. Could some flowers be removed from the liana so that at least one workpiece would conform to the schematic and machine would still be able to create at least n workpieces?
Input
The first line contains four integers m, k, n and s (1≤n,k,m≤5⋅105, k⋅n≤m, 1≤s≤k): the number of flowers on the liana, the number of flowers in one wreath, the amount of citizens and the length of Diana's flower sequence respectively.
The second line contains m integers a1, a2, ..., am (1≤ai≤5⋅105) — types of flowers on the liana.
The third line contains s integers b1, b2, ..., bs (1≤bi≤5⋅105) — the sequence in Diana's schematic.
Output
If it's impossible to remove some of the flowers so that there would be at least n workpieces and at least one of them fullfills Diana's schematic requirements, output −1.
Otherwise in the first line output one integer d — the number of flowers to be removed by Diana.
In the next line output d different integers — the positions of the flowers to be removed.
If there are multiple answers, print any.
Solution
显然,删掉的数的个数是(m-kn)个
最长的序列长度就是(k+m-kn)
O(n)求出是否有合法情况再暴力减就行了
#include <cstdio>
#include <algorithm>
#define N 500001
#define open(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);
#define fo(i,a,b) for (register int i=a;i<=b;i++)
using namespace std;
int m,k,n,s,t,tot,cnt,del,len,l,r,a[N],ans[N],g[N],need[N];
bool bz[N];
void write(int x)
{
fo(i,x,x+len)
{
if (cnt==del) break;
if (g[a[i]]) g[a[i]]--;else
{
ans[++cnt]=i;
if (cnt==del) break;
}
}
printf("%d\n",del);
fo(i,1,cnt)
printf("%d ",ans[i]);
exit(0);
}
int main()
{
open("diana");
scanf("%d%d%d%d",&m,&k,&n,&s);
fo(i,1,m)
scanf("%d",&a[i]);
fo(i,1,s)
{
scanf("%d",&t);
need[t]++;
g[t]++;
if (need[t]==1) tot++;
bz[t]=1;
}
del=m-k*n;
len=del+k;
fo(i,1,len)
{
if (bz[a[i]])
{
need[a[i]]--;
if (!need[a[i]]) tot--;
}
if (!tot) write(1);
}
l=1;r=len;
fo(i,2,m-len+1)
{
if (bz[a[l]])
{
need[a[l]]++;
if (need[a[l]]==1) tot++;
}
l++;r++;
if (bz[a[r]])
{
need[a[r]]--;
if (!need[a[r]]) tot--;
}
if (!tot && !((l-1)%k)) write(i);
}
printf("-1");
return 0;
}
CF1120 A. Diana and Liana的更多相关文章
- 【Codeforces 1120A】Diana and Liana
Codeforces 1120 A 题意:给\(n\)个数\(a_1..a_n\),要从其中删去小于等于\(n-m\times k\)个数,使得将这个数组分成\(k\)个一段的序列时有至少一段满足以下 ...
- Codeforces Round #543 Div1题解(并不全)
Codeforces Round #543 Div1题解 Codeforces A. Diana and Liana 给定一个长度为\(m\)的序列,你可以从中删去不超过\(m-n*k\)个元素,剩下 ...
- Codeforces Round #539Ȟȟȡ (Div. 1) 简要题解
Codeforces Round #539 (Div. 1) A. Sasha and a Bit of Relax description 给一个序列\(a_i\),求有多少长度为偶数的区间\([l ...
- Codeforces Round #543 (Div. 1, based on Technocup 2019 Final Round) 题解
题面戳这里 A. Diana and Liana 首先如果s>ks>ks>k一定无解,特判一下.那么我们考虑找恰好满足满足题目中的要求的区间[l,r][l,r][l,r],那么需要要 ...
- 记得有一个奇怪的ORA-04028: cannot generate diana for object
开发商称新一package,目前已经在翻译过程中的一些错误.提示PL/SQL:ORA-00942: table or view does not exists.这是一个非常明显的错误,即要么是表不存在 ...
- 尝试造了个工具类库,名为 Diana
项目地址: diana 文档地址: http://muyunyun.cn/diana/ 造轮子的意义 为啥已经有如此多的前端工具类库还要自己造轮子呢?个人认为有以下几个观点吧: 定制性强,能根据自己的 ...
- ORA-04028: cannot generate diana for object xxx
在ORACLE数据库(10.2.0.5.0)上修改一个包的时候,编译有错误,具体错误信息为"ORA-04028: cannot generate diana for object xxx&q ...
- k-means|k-mode|k-prototype|PAM|AGNES|DIANA|Hierarchical cluster|DA|VIF|
聚类算法: 对于数值变量,k-means eg:k=4,则选出不在原数据中的4个点,计算图形中每个点到这四个点之间的距离,距离最近的便是属于那一类.标准化之后便没有单位差异了,就可以相互比较. 对于分 ...
- DIANA算法
DIANA算法 DIANA算法示例 DIANA算法练习
随机推荐
- 下拉菜单,下拉导航,JavaScript,html,jQuery的实现代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- MPI自定义数据类型
自定义数据类型 1.数据类型辅助函数 MPI_Type_commit int MPI_Type_commit( MPI_Datatype *datatype ); 在通信中使用数据类型对象之前,必须提 ...
- vue项目在执行npm install时报错
npm WARN registry Unexpected warning for https://registry.npmjs.org/: Miscellaneous Warning ETIMEDOU ...
- java里equals和hashCode之间什么关系
如果要比较实际内存中的内容,那就要用equals方法,但是!!! 如果是你自己定义的一个类,比较自定义类用equals和==是一样的,都是比较句柄地址,因为自定义的类是继承于object,而objec ...
- ract-native常用命令
1.新建项目:react-native init AwesomeProject 2.运动项目 cd AwesomeProject react-native run-ios 3.添加第三方插件: yar ...
- Azure Storage 系列(二) .NET Core Web 项目中操作 Blob 存储
一,引言 上一篇文章,我们介绍到在实际项目中系统会产生大量的日志文件,用户上传的头像等等,同时也介绍到可以使用Azure Blob Storage 来存储项目中的一些日志文件,用户头像,用户视频等等. ...
- wpf之DataGrid绑定DataTable,其中DataGridComboBoxColumn双向绑定枚举enum
百度了快一天,没结果,除了几个原创的,都是复制粘贴的内容. 不想用别的笨办法,于是脑洞大开,想出了我的办法. 首先是前台代码,与网上的比较类似: xmlns:jz="clr-namespac ...
- 线上环境去除console
npm i -D babel-plugin-transform-remove-console babel.config.js // 获取 VUE_APP_ENV 非 NODE_ENV,测试环境依然 c ...
- 02 axios
request.js import axios from 'axios' const config = require('@/config') const instance = axios.creat ...
- Mysql慢查询(配置)
慢查询?什么鬼?查询很慢吗?刚看一脸萌,学无止境 好吧,就是执行很慢的SQL 什么是慢查询 慢查询定义及作用 慢查询日志,顾名思义,就是查询慢的日志(感觉在说F话),是指Mysql记录所有执行超过lo ...