题意:有两场表演,n个艺术家,根据规则找出我们要挑选的人的编号,输出编号。

规则1 保证每个人只能参加一场表演,也就是同一个艺术家不能出现在两场表演中

规则2 两场表演参演的艺术家的数量是相同的

规则3 第一场可以演小丑的艺术家的数量要和第二场表演杂技的艺术家数量保持相同

分析:

很久没撸代码看到这题有点蒙,按说应该挺简单的。。。结果还是很久没想明白。。。
首先我们发现输入是两行数据,一行表示第i个人能不能演小丑,一行表示第i个人能不能演杂技,那么也就是说,把整个艺术家群体看做一个集合,可知为了计算方便不出错,可以分为四个小集合,分别是两种都不能演的艺术家数量A,只能演杂技的艺术家数量B,只能演小丑的艺术家数量C,以及两种都能演的艺术家数量D。

前两个规则都好搞定,就是第三个规则不好保证,而把艺术家分集合设未知数就可以巧妙地构造恒等关系,从而列出一下两个方程。

我们设a,b,c,d为第一场表演在四个集合中所选艺术家的数量。

那么可知
a+b+c+d=n/2a+b+c+d = n/2a+b+c+d=n/2 (规则二)
c+d=B−b+D−dc+d = B-b + D - dc+d=B−b+D−d(规则三:第一组小丑可演小丑数量 = 第二组杂技数量)
发现:两个方程四个未知数
枚举任意两个那么就可以根据这两个等式把剩下两个未知数求出来,根据求出的未知数就可以把对应集合的艺术家下标输出出来,由于任意满足条件的答案皆可。
这道题就是一个数学题,没有啥编程难点可言,只要逻辑清晰,还是能很快AC的- -…
所以关于问题中有明显数量关系约束的题目,不妨设未知数解方程组解决。
复杂度:O(N2N^2N2)N&lt;5000N&lt;5000N<5000

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 5010;
vector<int>c,s,com,none;
int bokc[maxn],boks[maxn];
int main()
{int n;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%1d",&bokc[i]);}for(int i=1;i<=n;i++){scanf("%1d",&boks[i]);}for(int i=1;i<=n;i++){if(boks[i]==bokc[i]){if(boks[i])com.push_back(i);else none.push_back(i);}if(boks[i]!=bokc[i]){if(bokc[i])c.push_back(i);if(boks[i])s.push_back(i);}}int a,b,C,d;bool yes = 0;for(int i=0;i<=min((int)none.size(),n/2);i++){////枚举aa = i;//a = 0d = s.size()+com.size()-n/2 + a; //d = 0if(d<0)continue;int bc = n/2-a-d;// bc = 2if(bc<0)continue;for(int j = 0;j<=min((int)c.size(),n/2);j++){//枚举CC = j;b = bc-C;if(a+b+C+d!=n/2)continue;if(C+d!=s.size()-b+com.size()-d)continue;bool f=0;//所有continue都是非法的情况 这里注意就算是前面合法,数量超过实际情况也是非法if(a>none.size())continue;if(b>s.size())continue;if(C>c.size())continue;if(d>com.size())continue;for(int o = 0;o<a;o++){if(!f)printf("%d",none[o]),f=1;else printf(" %d",none[o]);}for(int o = 0;o<b;o++){if(!f)printf("%d",s[o]),f=1;else printf(" %d",s[o]);}for(int o = 0;o<C;o++){if(!f)printf("%d",c[o]),f=1;else printf(" %d",c[o]);}for(int o = 0;o<d;o++){if(!f)printf("%d",com[o]),f=1;else printf(" %d",com[o]);}yes = 1;break;}if(yes)break;}if(!yes)puts("-1");return 0;
}

[CodeForces-1138B] *Circus 解方程|数学相关推荐

  1. Codeforces 1138B Circus (构造方程+暴力)

    题意: 给你两个01串,要你选n/2个位置,使得选的位置在s1中"1"的数量等于未选的s2中"1"的数量 n<=5000,1s 思路: 设两个串中出现&q ...

  2. [BZOJ3751] [NOIP2014] 解方程 (数学)

    Description 已知多项式方程:$a_0+a_1*x+a_2*x^2+...+a_n*x^n=0$ 求这个方程在[1,m]内的整数解(n和m均为正整数). Input 第一行包含2个整数n.m ...

  3. LeetCode 441. 排列硬币(数学解方程)

    1. 题目 你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币. 给定一个数字 n,找出可形成完整阶梯行的总行数. n 是一个非负整数,并且在32位有符号整型的范围 ...

  4. 【pyhton解决数学问题】2用python解方程

    目录 1Sympy的基本概念 1符号计算 2计算机代数系统 3实际解方程 1把未知数设为符号 2用solve()解方程 1解一元一次方程 2解二元一次方程组 3解决一元二次方程 总结 哈喽,大家好! ...

  5. python数学方程计算_用Python解方程

    一元一次方程 例题1: 这是北师大版小学六年级上册课本95页的一道解方程练习题: 大家可以先口算一下,这道题里面的x的值为200 接下来我们用python来实现,代码如下,每一句代码后面都写有解释语: ...

  6. 2017广东工业大学程序设计竞赛决赛 题解源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)...

    心得: 这比赛真的是不要不要的,pending了一下午,也不知道对错,直接做过去就是了,也没有管太多! Problem A: 两只老虎 Description 来,我们先来放松下,听听儿歌,一起&qu ...

  7. 解方程 2014NOIP提高组 (数学)

    解方程  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description 输入描述 Input Description 输入文 ...

  8. java2的7次方怎么表示_python编程解方程第二弹:10行代码解二次方程(纯字符)...

    用纯字符串格式来记录二次方程: '3x^2-10x-8=0' 'x^2-2x+1=0' '3x^2+14x+8=0' 'x^2=9' 二次方怎么表示呢?比如上面的^表示法,或者是python风格的** ...

  9. 计算机分数的简便运算,分数的简便运算和分数的解方程

    问题描述: 分数的简便运算和分数的解方程 简便运算 四又十五分之八+一又二十分之十三+三又四分之一 十-二又十二分之七-四又六分之五 五又五分之二-(1.8+二又四分之九) 二又三分之一-1.5+三又 ...

最新文章

  1. switch注意事项和细节讨论
  2. 25岁php,“最好的语言“ 25 岁了,PHP说要走向安全和开放!
  3. 在 CentOS 上安装和配置 NFS 4.0
  4. ubuntu20.04安装simhei字体--jupyter中文显示框框的解决方案
  5. 基于matlab 的电力系统潮流仿真
  6. 209最新100个面试问题大全及答案
  7. linux命令之hostid
  8. 申请开通支付宝当面付、电脑网站、手机网站、APP、刷脸支付
  9. 目前为止最靠谱的禁用windows10update易升自动更新的办法
  10. Java计算某年某月天数_编程计算某年某月某日是该年的第多少天。例如:2016年3月2日是2016的 第62 天。(java)...
  11. UIKit的简单入门介绍
  12. 读《混世小农民》有感
  13. MyBatis框架笔记
  14. 推荐一款好用的固定资产管理系统
  15. Android面试题及答案
  16. 基于jsp(java)超市管理系统的设计和开发(含源文件)
  17. (二分图)洛谷P2071座位安排
  18. Java教程!Java标识符与关键字的区别是什么?
  19. VLAN(TRUNK端口 ACCESS 端口)
  20. 树莓派-SIM7600CE 4G部署(PPP拨号方式)

热门文章

  1. C#秘密武器之反射——基础篇
  2. .NET C# I/O 操作
  3. 广州技术沙龙第 2、3 期参会者twitter、blog、兴趣大合集
  4. RabbitMQ六种队列模式-工作队列模式
  5. git版本管理工具学习
  6. pxe安装linux后命令不可用,pxe自动安装linux
  7. springboot 整合druid
  8. 【算法设计与分析】06 几类重要的函数
  9. 通配符的匹配很全面, 但无法找到元素 'mvc:annotation-driven' 的声明
  10. 【C语言进阶深度学习记录】十七 宏定义的使用与分析