[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 ...
随机推荐
- [转帖]拿小本本记下的Linux Shell常用技巧(一)
拿小本本记下的Linux Shell常用技巧(一) https://zhuanlan.zhihu.com/p/73361101 一. 特殊文件: /dev/null和/dev/tty Linux系统提 ...
- Thinking In Java 4th Chap7 复用类
复用代码的两种方法:组合和继承 组合方法:(新类中产生现有类的对象) 没什么好说的,就是调用别类的对象而已 值得一提的是一个特殊方法:toString()当需要一个String却只有对象时能够自动调用 ...
- # VsCode 配置C++调试运行
VsCode 配置C++调试运行 打开命令面板快捷键为F1,软件上写的Ctrl+Shift+P似乎没用 先安装插件使得可以运行 先自行在vsc扩展中搜索C++安装C/C++插件 再参考知乎专栏中安装c ...
- phpstrom
在phpstrom 中启用composer 步骤: 1.打开编辑器,选择 文件(file)->设置(setting),找到 Command Line Tool Support ,点击 + 号进行 ...
- 十二、使用PWM调整LCD背光亮度
和手机一样,开发板中也带有调整背光亮度的功能. 调整背光亮度依赖于PWM,它通过调节脉冲宽度来控制背光亮度,此方式需要使用PWM驱动.本章将对其进行讲解. 一.用户空间调整背光亮度 一般应用程序可以通 ...
- [eclipse]UML之AmaterasUML 插件
软件体系结构分析软件设计模式要求给出相应设计模式源码对应的UML类图,在此之前我安装过一种UML插件,可以自动生成一个源码包对应的UML类图,但是重装过系统,所以软件包括eclipse都重新下载了新的 ...
- (一)weblogic11g的安装配置
一.安装 找到weblogic安装包,小编这里用的是wls1034_win32.exe版本,双击打开 完成后运行快速启动,打开快速启动界面,配置weblogic.如果没有打开,还可以在开始菜单中找到q ...
- shell脚本使用记录
一些比较功能需求比较简单的可以考虑使用shell脚本来写,这样可以方便快捷稳定 1. 读取文件值,根据文件值1 或 0 来开启和关闭某些程序 a. while : do done 是无限循环. b. ...
- flex应用实例
代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...
- java实现当前时间往前推N小时
import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date; /** * @author sha ...