题意:

给你两个01串,要你选n/2个位置,使得选的位置在s1中"1"的数量等于未选的s2中"1"的数量

n<=5000,1s

思路:

设两个串中出现"00""01""10""11"的总数是A,B,C,D,我们选的个数分别是a,b,c,d

数据最多能承受n^2的暴力

根据题意,有a+b+c+d=n/2     ①

c+d=B-b+D-d    ②

联立得d=B+D+a-n/2

于是我们暴力a,可以得到d

然后将a,d带入①可得b+c=n/2-a-d

暴力b可得c

最后只要a,b,c,d是否全部合法,输出方案即可

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<stack>
#include<queue>
#include<deque>
#include<set>
#include<vector>
#include<map>
#include<functional>
#include<cmath>#define fst first
#define sc second
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))
#define lson l,mid,root<<1
#define rson mid+1,r,root<<1|1
#define lc root<<1
//#define rc root<<1|1
#define lowbit(x) ((x)&(-x)) using namespace std;typedef double db;
typedef long double ldb;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PI;
typedef pair<ll,ll> PLL;const db eps = 1e-6;
const int mod = 1e9+7;
const int maxn = 2e6+100;
const int maxm = 2e6+100;
const int inf = 0x3f3f3f3f;int n;
char s1[maxn];
char s2[maxn];
int A,a,B,b,C,c,D,d;
int main(){scanf("%d", &n);scanf("%s", s1+1);scanf("%s", s2+1);for(int i = 1; i <= n; i++){if(s1[i]=='0'){if((s2[i]=='0'))A++;else B++;}else{if(s2[i]=='0')C++;else D++;}}int mm = min(A, n/2);a = b = c = d = -1;int ys = 0;for(a = 0; a <= A && a <= n/2; a++){if(B+D-n/2+a<=D&&B+D-n/2+a>=0){d = B+D-n/2+a;//int m = min(min(n/2-a-d,B),n/2);//printf("%d %d\n",a,d);for(b = 0; b <= B&&b<=n/2-a-d; b++){//printf("  %d\n",b);if(n/2-a-b-d<=C&&n/2-a-b-d>=0){c = n/2-a-b-d;ys=1;break;}}if(ys)break;}}//printf("%d %d %d %d\n", a,b,c,d);if(!ys){return printf("-1"),0;}for(int i = 1; i <= n; i++){if(s1[i]=='0'){if(s2[i]=='0'&&a){a--;printf("%d ",i);}else if(s2[i]=='1'&&b){b--;printf("%d ",i);}}else if(s1[i]=='1'){if(s2[i]=='0'&&c){c--;printf("%d ",i);}else if(s2[i]=='1'&&d){d--;printf("%d ",i);}}}return 0;
}

转载于:https://www.cnblogs.com/wrjlinkkkkkk/p/10505395.html

Codeforces 1138B Circus (构造方程+暴力)相关推荐

  1. CodeForces 1138B暴力+剪枝

    [题目链接]Circus [题目分析]理解题意以后发现并没有什么思路,没有什么算法能用,这个时候就应该想到计算机解题的本质--暴力求解.相应的就要想到剪枝的条件,肯定不能盲目的暴力求解. 总共有四种人 ...

  2. CodeForces - 1213E Two Small Strings(暴力+构造)

    题目链接:点击查看 题目大意:给出一个字符串s和字符串t,s和t的长度皆为2,现在要求我们构造出一个字符串res,他的长度是3*n,要求字母a和字母b还有字母c各出现3次,并满足字符串s和字符串t不能 ...

  3. CodeForces 459C(构造题)

    http://codeforces.com/problemset/problem/459/C /** 题意:有n个同学,k辆车,d天(每天n个同学去一个地方)问经过d天后,任意的多个同学不能总在一起d ...

  4. [ An Ac a Day ^_^ ] CodeForces 691F Couple Cover 花式暴力

    Couple Cover Time Limit: 3000MS   Memory Limit: 524288KB   64bit IO Format: %I64d & %I64u Descri ...

  5. [CodeForces-1138B] *Circus 解方程|数学

    题意:有两场表演,n个艺术家,根据规则找出我们要挑选的人的编号,输出编号. 规则1 保证每个人只能参加一场表演,也就是同一个艺术家不能出现在两场表演中 规则2 两场表演参演的艺术家的数量是相同的 规则 ...

  6. Codeforces - 474D - Flowers - 构造 - 简单dp

    https://codeforces.com/problemset/problem/474/D 这道题挺好的,思路是这样. 我们要找一个01串,其中0的段要被划分为若干个连续k的0. 我们设想一个长度 ...

  7. Codeforces gym 100685 A. Ariel 暴力

    A. Ariel Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100685/problem/A Des ...

  8. Codeforces 460E Roland and Rose(暴力)

    题目链接:Codeforces 460E Roland and Rose 题目大意:在以原点为圆心,半径为R的局域内选择N个整数点,使得N个点中两两距离的平方和最大. 解题思路:R最大为30.那么事实 ...

  9. 枚举 ---- B. Power Sequence[Codeforces Round #666 (Div. 2)][暴力]

    B. Power Sequence 有 n 个数,现在要求将这个数列变成一个等比数列的形式 你可以将这 n 个数随意排列 或者将任意一个数加一或者减一操作,每次此类操作都要花费 1,问最少花费是多少 ...

最新文章

  1. Asynctask源码分析
  2. 准备把平台挪到linux
  3. 第一阶段SCRUM冲刺 03
  4. 网站中人性化提示信息的JavaScript实现
  5. 从近两年的CVPR会议来看,目标检测的研究方向是怎么样的?
  6. 《团队-团队编程项目作业名称-团队信息》
  7. 信道检测手机软件 ios_【手机软件】云听:稀有神器,移动音频的国家队,某拉雅资源它都有!...
  8. 什么决定了电商双11大促的成败
  9. hdu4405:概率dp
  10. day36-表关系(外键)
  11. 使用libbpf-bootstrap构建BPF应用程序
  12. mysql查询语句内连接、左连接、右连接以及全连接查询
  13. 微信撤回软件安卓版_微信阻止撤回app最新版-微信阻止撤回软件下载v1.0.3 安卓版-腾牛安卓网...
  14. 常用网络故障排除命令介绍
  15. 教程篇:《基础模块2》金蝶K3WISE15.0-注册套打教程
  16. 光流传感器 定位精度_光流传感器
  17. Linux系统如何优化
  18. 史上最全报表教程,还不快收藏!
  19. pythonocc常见问题集锦
  20. 新媒体运营胡耀文教程:创作爆款短视频的“编剧思维”

热门文章

  1. 数据库开发——MySQL——多表查询
  2. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1106:年龄与疾病
  3. 大数据WEB阶段(十六)JavaEE三大 核心技术之监听器Listener
  4. Java面向对象(一)面向对象简介和初步 了解
  5. 【ARM】Tiny4412裸板编程之MMU(段 16M)
  6. 【IT资讯】TIOBE - 2020年7月编程语言排行
  7. 【Linux】一步一步学Linux——umask命令(111)
  8. 【Linux系统编程】浅谈进程地址空间与虚拟存储空间
  9. 开源游戏机java模拟器_开源一个Flutter编写的完整终端模拟器
  10. python openstack oslo_config使用_OpenStack配置解析库oslo.config的使用方法