[cf1138BCircus][枚举,列等式]
https://codeforc.es/contest/1138/problem/B
1 second
256 megabytes
standard input
standard output
Polycarp is a head of a circus troupe. There are nn — an even number — artists in the troupe. It is known whether the ii-th artist can perform as a clown (if yes, then ci=1ci=1, otherwise ci=0ci=0), and whether they can perform as an acrobat (if yes, then ai=1ai=1, otherwise ai=0ai=0).
Split the artists into two performances in such a way that:
- each artist plays in exactly one performance,
- the number of artists in the two performances is equal (i.e. equal to n2n2),
- the number of artists that can perform as clowns in the first performance is the same as the number of artists that can perform as acrobats in the second performance.
The first line contains a single integer nn (2≤n≤50002≤n≤5000, nn is even) — the number of artists in the troupe.
The second line contains nn digits c1c2…cnc1c2…cn, the ii-th of which is equal to 11 if the ii-th artist can perform as a clown, and 00 otherwise.
The third line contains nn digits a1a2…ana1a2…an, the ii-th of which is equal to 11, if the ii-th artist can perform as an acrobat, and 00 otherwise.
Print n2n2 distinct integers — the indices of the artists that should play in the first performance.
If there are multiple answers, print any.
If there is no solution, print a single integer −1−1.
4
0011
0101
1 4
6
000000
111111
-1
4
0011
1100
4 3
8
00100101
01111100
1 2 3 6
In the first example, one of the possible divisions into two performances is as follows: in the first performance artists 11 and 44 should take part. Then the number of artists in the first performance who can perform as clowns is equal to 11. And the number of artists in the second performance who can perform as acrobats is 11 as well.
In the second example, the division is not possible.
In the third example, one of the possible divisions is as follows: in the first performance artists 33 and 44 should take part. Then in the first performance there are 22 artists who can perform as clowns. And the number of artists in the second performance who can perform as acrobats is 22 as well.
题意:有四种类型的人,(01) (10) (00) (11),求一种分配方案,使两队人数相同,并且A队第一位为1的个数与B队第二位为1的个数相同 (n<=5000)
题解:直接枚举A队(10)和(01)的人数为 i , j ,设A队(11)为x,则可以得到一个等式 i+x = (n4-x) + (n1-j),即 x=(n4+n1-j-i)/2,所以可以解出相应的A队(11)的个数x以及(00)的个数 n/2-x-i-j
#include<iostream>
#include<cstdio>
#include<stack>
using namespace std;
#define debug(x) cout<<"["<<#x<<"]"<<" is "<<x<<endl;
typedef long long ll;
char ch[],ch2[];
int bq[];
int main(){
int n;
scanf("%d",&n);
scanf("%s",ch+);
scanf("%s",ch2+);
int a,b,c,d;
a=b=c=d=;
for(int i=;i<=n;i++){
if(ch[i]==''&&ch2[i]=='')a++;
else if(ch[i]==''&&ch2[i]=='')b++;
else if(ch[i]==''&&ch2[i]=='')c++;
else if(ch[i]==''&&ch2[i]=='')d++;
}
int a1,a2,a3,a4;
a1=a2=-;
for(int i=;i<=b;i++){
int f=;
for(int j=;j<=c;j++){
int x=i;
int y=c-j;
a3=(a+y-x)/;
a4=n/-x-j-a3;
if((a+y-x)%==&&a3>=&&a3<=a&&a4>=&&a4<=d){
a1=i;
a2=j;
f=;
break;
}
}
if(f)break;
}
if(a1==-&&a2==-){
printf("-1\n");
}
else{
int tot=;
for(int i=;i<=n;i++){
if(ch[i]==''&&ch2[i]==''&&a3){
a3--;
bq[++tot]=i;
}
else if(ch[i]==''&&ch2[i]==''&&a1){
a1--;
bq[++tot]=i;
}
else if(ch[i]==''&&ch2[i]==''&&a2){
a2--;
bq[++tot]=i;
}
else if(ch[i]==''&&ch2[i]==''&&a4){
a4--;
bq[++tot]=i;
}
}
for(int i=;i<=n/;i++){
printf("%d",bq[i]);
char cc=(i==n/)?'\n':' ';
printf("%c",cc);
}
}
return ;
}
[cf1138BCircus][枚举,列等式]的更多相关文章
- [hdu5255]枚举
思路:这题与csu1392题目类似,方法类似.枚举最高位,最低位和中间数字的长度,然后列等式,计算中间的数字,看长度是不是跟枚举的一致,需要注意的是中间数字可以有前导0,如果根据等式算出来的中间数字为 ...
- [WinForm] DataGridView 绑定 DT && ComboBox 列绑定 Dict
一 需求介绍 一般像枚举类型的数据,我们在数据库里存储着诸如(1.2.3.4-)或者("001"."002"."003"-)此类,但是界面 ...
- hibernate 使用枚举字段的最佳实践
枚举类虽然很简单,但是却往往是系统中业务逻辑最集中最复杂的地方.本文将会分享我们项目中基于hibernate的枚举类使用规范,包含数据库中枚举列数据类型.注释.枚举列与枚举类的映射等. 一.枚举类定义 ...
- Gym 101308D Database 枚举
大致题意: 给出一张表,n行m列,每一行的列用逗号分隔.判断这个表是否有冗余元素.如果一张表中有两行两列对应的的元素相同,那么这个表就有冗余元素. 分析: 先枚举要排序的列,然后枚举行,如果相邻两行相 ...
- SP1026 FAVDICE - Favorite Dice 数学期望
题目描述: 一个n面的骰子,求期望掷几次能使得每一面都被掷到. 题解:先谈一下期望DP. 一般地,如果终止状态固定,我们都会选择逆序计算. 很多题目如果顺序计算会出现有分母为 0 的情况,而逆序计算中 ...
- ACM模板(持续补完)
1.KMP #include<cstring> #include<algorithm> #include<cstdio> using namespace std; ...
- bzoj1720: [Usaco2006 Jan]Corral the Cows 奶牛围栏
金组题什么的都要绕个弯才能AC..不想银组套模板= = 题目大意:给n个点,求最小边长使得此正方形内的点数不少于c个 首先一看题就知道要二分边长len 本来打算用二维前缀和来判断,显然时间会爆,而且坐 ...
- Ural-1146Maximum Sum-最大子矩阵
Time limit: 0.5 second Memory limit: 64 MB Given a 2-dimensional array of positive and negative inte ...
- haligong2016
A 采用递推的方法,由于要到达棋盘上的一个点,只能从左边或者上边过来,根据加法原则,到达某一点的路径数目,就等于到达其相邻的上点和左点的路径数目的总和.所有海盗能达到的点将其路径数置为0即可. #in ...
随机推荐
- Docker 部署Jira8.1.0
Jira与Confluence一样,都需要用到独立的数据库,对于数据库的安装我们不做介绍,主要介绍如何用Docker部署Jira以及对Jira进行破解的操作. 1.数据库准备 关于数据库官方文档说明: ...
- Maven web项目创建
一.New →Other →Maven→Maven Module 二.填入Module Name 三.选择maven-archetype-webapp 四.填入Group Id.Artifact Id ...
- 整理下线段树吧 poj hotel
除了上次的新学的有 区间更新 延迟更新 区间合并 先说下区间更新以及延迟更新吧 既然是对区间的维护 在求解一些问题的时候 有的时候没有必要对所有的自区间都进行遍历 这个时候 延迟标记就派上用场了 ( ...
- (十)mybatis之缓存
一.缓存的意义 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)去查询,从缓存中进行查询,从而提高查询效率,解决了高并发系统的性能问题. 二.mybatis ...
- android 蓝牙连接端(客户端)封装
0.权限 AndroidManifest.xml <uses-permission android:name="android.permission.BLUETOOTH"/ ...
- MySQL高版本默认密码查找
解决方式如下: 1:找到mysql的安装目录到跟目录下找到Data文件夹 2:打开Data/文件夹找到一个以.err结尾的文件用记事本打开,里面记录了你安装Mysql的一些日志,其中就记录了你的初始密 ...
- ASP.NET WEB应用程序(.network4.5)MVC 工作原理
MVC就是模型.视图.控制器. 项目中控制器对应Controllers目录,视图对应Views目录,模型对应Models目录. 1.当我们创建一个控制器时,比如在Controllers目录新建一个名字 ...
- Windows群集之NLB【转】
本文转自:http://www.talkwithtrend.com/Article/31746 网络负载平衡群集(Network Load balancing) 在Internet快速发展的今天,为了 ...
- 内置函数----format
说明: 1. 函数功能将一个数值进行格式化显示. 2. 如果参数format_spec未提供,则和调用str(value)效果相同,转换成字符串格式化. >>> format(3.1 ...
- 根据导入xlxs的文件,来写入数据库
今天讲解一下上传文件.前台必须保持传参类型"multipart/form-data" 后台可以设定 public static final String MULTIPART_FOR ...