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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/425060.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

概率论与数理统计

记录概率论与数理统计的笔记。课程是中国大学MOOC 浙江大学的《概率论与数理统计》课程。 本系列所有内容来源于&#xff1a;概率论与数理统计的学习内容来源于中国大学MOOC&#xff0c;以及参考书籍《概率论与数理统计》第四版&#xff0c;浙江大学。 必然的、确定性的事件…

[Leetcode][程序员面试金典][面试题08.03][JAVA][魔术索引][递归][优化]

【问题描述】[简单] 【解答思路】 1. 逐个查找 时间复杂度&#xff1a;O(N) 空间复杂度&#xff1a;O(1) public int findMagicIndex(int[] nums) {for (int i 0, length nums.length; i < length; i) {if (i nums[i])return i;}return -1;}2. 逐个查找优化 有序升序…

5如何让进行项目管理

项目管理分为五个过程组

python练习题-day25

class Person:  __key123def __init__(self,username,password):self.usernameusernameself.__passwordpassworddef __get_pwd(self):return self.__passworddef login(self):self.__get_pwd() alexPerson("alex","alex3714") print(alex._Person__passw…

第一章 概率论的基本概念

概率论与数理统计的学习内容来源于中国大学MOOC&#xff0c;以及参考书籍《概率论与数理统计》第四版&#xff0c;浙江大学。 随机现象  在一定条件下&#xff0c;有可能出现多种结果&#xff1b;而且在事情发生前不能知道结果。 随机试验  概念&#xff1a;对随机现象的…

【知识导图】数据结构与算法

[基础知识点] 10 个数据结构&#xff1a;数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树&#xff1b; 10 个算法&#xff1a;递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法 [学习技巧] 学习它的“来历”“…

CF 1174 D. Ehab and the Expected XOR Problem 异或技巧

题意就是给我们两个数n,x。让我们构造个数组&#xff0c;数组有三个条件 1.要有尽可能多的元素 2.要其中任何一段数字的异或和不等于0和x 3.元素的范围是[ 1, 2n2^n2n&#xff09; 分析&#xff1a;如果对异或足够敏感的话 应该能想到其中第二个条件的意思&#xff0c;其实…

第三十七期:刷脸支付叫好不叫座,为啥消费者和商家都不愿用先进科技?

移动支付相信大多数人都不陌生&#xff0c;中国移动支付的普及被人称为“新四大发明”&#xff0c;在中国移动支付产品发展如火如荼的今天&#xff0c;刷脸支付成为了新的时尚&#xff0c;然而这个时尚的支付方式却显得叫好不叫座&#xff0c;刷脸支付的问题到底出在哪了? 移动…

Hadoop 配置文件 启动方式

配置文件&#xff1a; 默认的配置文件&#xff1a;相对应的jar 中 core-default.xml hdfs-default.xml yarn-default.xml mapred-default.xml 自定义配置文件$HADOOP_HOME/etc/hadoop/ core.site.xml hdfs-site.xml yarn-site.xml mapredu-site.xml 启动方式&#xff1a; 各个服…

第二章 随机变量

随机变量  目标&#xff1a;将实验结果数量化。实验结构有数字型和非数字型。数字型&#xff1a;降雨量、上车人数等。非数字型&#xff1a;晴天/阴天/下雨、化验结果阴性/阳性等。  定义&#xff1a;随机试验样本空间S&#xff0c;如果XX(e)为定义在S上的实数单值函数&…

[Leetcode][第632题][JAVA][最小区间][堆][滑动窗口]

【问题描述】[困难] 【解答思路】 1. 堆 复杂度 class Solution {public int[] smallestRange(List<List<Integer>> nums) {//区间的左边和右边int rangeLeft 0, rangeRight Integer.MAX_VALUE;//最小范围int minRange rangeRight - rangeLeft;//区间的左边最…

第十期:过去50年间,十大热门语言及发明者大盘点

本文收集了十大热门编程语言背后的程序员和设计者的名字和大家分享。以下是十大热门编程语言及其创建者&#xff0c;排名不分先后。 软件领域有许多编程语言&#xff0c;每年还涌现出越来越的新语言。新发布的语言有Scala、Kotlin、Go和Closure&#xff0c;但历史证明&#xff…

2018-2019-2 20165212《网络攻防技术》Exp5 MSF基础应用

2018-2019-2 20165212《网络攻防技术》Exp5 MSF基础应用 攻击成果 主动攻击的实践 ms17010eternalblue payload windows/x64/meterpreter/reverse_tcp&#xff08;成功&#xff09;payload generic/shellreversetcp&#xff08;成功&#xff09;ms17010psexec&#xff08;成功且…

【数据结构与算法】复杂度分析

一、什么是复杂度分析&#xff1f; 1.数据结构和算法解决是“如何让计算机更快时间、更省空间的解决问题”。 2.因此需从执行时间和占用空间两个维度来评估数据结构和算法的性能。 3.分别用时间复杂度和空间复杂度两个概念来描述性能问题&#xff0c;二者统称为复杂度。 4.复杂…

第十一期:30秒内便能学会的30个实用Python代码片段

许多人在数据科学、机器学习、web开发、脚本编写和自动化等领域中都会使用Python&#xff0c;它是一种十分流行的语言。 Python流行的部分原因在于简单易学。 本文将简要介绍30个简短的、且能在30秒内掌握的代码片段。 1. 唯一性 以下方法可以检查给定列表是否有重复的地方&…

使用scikit中的聚类

这是一次数据实验。基于七月算法邹博讲义和scikit-lean官网。 聚类&#xff1a;就是对大量未知标注的数据集&#xff0c;按数据的内在相似性将数据划分为多个类别&#xff0c;使得类别内的数据相似性较大而类别间的相似性较小。 1 k-means算法  参数&#xff1a;聚类的数目…

概率中比较重要的知识

-什么是协方差&#xff1f; 就是衡量两个随机变量&#xff08;X,YX,YX,Y&#xff09;之间相关性的量&#xff0c;取多个两个量的样本&#xff0c;通过判断他们大小变化关系&#xff0c;判断这两个量是正相关还是负相关或无相关。 记做&#xff1a;Cov(X,Y)E[(X−E(X))(Y−E(Y)…

MySQL学习(三)

-- 计算字段 -- 拼接字段 SELECT CONCAT(vend_name, (,vend_country,)) FROM Vendors ORDER BY vend_name;SELECT CONCAT(vend_name,vend_country) FROM Vendors ORDER BY vend_name;-- CONCAT(str1,str2,...) 拼接查询的值 SELECT CONCAT(vend_name,vend_country) FROM Vendo…