Cow Evolution 题解

2024-02-13 05:20
文章标签 cow 题解 evolution

本文主要是介绍Cow Evolution 题解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

现在是3019年,在过去的一千年里发生了不计其数的牛类进化,产生了具有各种有趣特性的奶牛。

牛类进化的记录可以用一棵树来表示,起源是位于树根位置的没有特殊特性的奶牛。树上每一个产生后代的结点,有可能所有的奶牛都进化出了一种新的特性(比如说喷火(fire breathing),如下图所示,其中所有斑点(spots)奶牛最后都能喷火),或者是奶牛种群产生了分支进化,其中有些进化出了新的特性(比如,飞(flying)),有的没有。

树底部的叶结点表示3019年所有产生的奶牛的子种群。没有不同的叶结点(子种群)具有完全相同的一组特性。例如,子种群#1是没有特殊特性的奶牛,子种群#3是能够心灵感应的(telepathic)并且会飞的奶牛。相比之下,子种群#2是会飞但不能心灵感应的奶牛。子种群#3是唯一既会飞又会心灵感应的。
在这里插入图片描述
像上图这样每一种进化出的新特性都恰好在树中的一条边上产生(也就是说,在整个进化历史中仅在一个时间点产生),这样的进化树被称为是“合法的”。例如,如果斑点这一特性在两个不同分支中均进化产生,这棵进化树就不是合法的。给定3019年奶牛子种群的描述,请判断是否这可以由一棵合法的进化树所解释。

输入

输入的第一行包含子种群的数量N(2≤N≤25)。以下N行每行描述一个子种群。每行包含一个整数K(0≤K≤25),之后是K个该子种群奶牛所拥有的特性。特性是由至多20个小写字母(a…z)组成的字符串。没有两个子种群拥有完全相同的特性。

输出

如果可能构造一棵可以解释所有子种群产生途径的进化树,输出"yes",否则输出"no"。

样例输入

4
2 spots firebreathing
0
1 flying
2 telepathic flying

样例输出

yes

数据范围限制

2≤N≤25
0≤K≤25

题目大意:

我以前很少在博客写题目大意,可这题是有点难懂,所以讲一下。
题目讲了给出n个具有若干个(或没有)特性的叶子节点,求这些叶子节点是否有具有同一个也根节点。对于每一个结点,它能有无线条分支,每条分支可进化出的一个新特性(或不进化)。 并且每一个子节点都遗传了它父亲节点的全部特性,每个分支都是独一无二的,firebreathing这种特性进化只有可能从一种生物进化而成(这句话的意思是有同一特性的叶子节点必有同样的祖先)

题解:

想法:

这道题算是一道数学题,要我们证明同一特性的叶子节点必有同样的祖先这一 结论_ 1,如果成立那就输出“yes”,否则就“no”。我们先设这一特性成立,那么就又得出一个结论_2——特性完全不同的叶子节点必有不同的祖先。再根据这个结论枚举任意两种 特性所拥有子节点 (题目中给的是子节点所拥有特性,所以我们要转换,并将特性字符串改成数字不用在意顺序),会有三种情况,一是没子节点重叠,不用理会,因为这两个不同性质成功分成两个不同的结点中;二是子节点完全重叠,并且多数覆盖少数,也不用理会,因为这两个不同性质成功分成一个相同的结点中;三是子节点重叠,并且两者没完全覆盖,这种情况就有违背于上没的结论,就输出“no”,因为重叠部分满足结论_1,而双方未重叠部分又满足结论_2,矛盾

实现:

想法清楚后,再来看看如果实现。

实现代码有两个难点, 一是转换“子节点所拥有特性”为“特性所拥有子节点”;二是那三种情况的实现 在这里我就上第二个难点的核心代码给大家参考:

for(int i=1;i<=bj[0][0];i++){for(int j=1;j<=bj[0][0];j++){//任意两种特性所拥有子节点if(i!=j){int o;if(b[i][0]>b[j][0])o=i;else o=j;int js=0,js1=0;//js表示重叠了几个,js1表示是否重叠for(int k=1;k<=b[o][0];k++){for(int l=1;l<=b[i+j-o][0];l++){if(b[o][k]==b[i+j-o][l]){js++;js1=1;break;}}}if(js1==1&&js<b[i+j-o][0]){//重叠了并且两者没完全覆盖printf("no");//矛盾,输出“no”return 0;}}}
}
printf("yes");//证明不可能不成立,代表成立;

这篇关于Cow Evolution 题解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/704583

相关文章

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

C - Word Ladder题解

C - Word Ladder 题解 解题思路: 先输入两个字符串S 和t 然后在S和T中寻找有多少个字符不同的个数(也就是需要变换多少次) 开始替换时: tips: 字符串下标以0开始 我们定义两个变量a和b,用于记录当前遍历到的字符 首先是判断:如果这时a已经==b了,那么就跳过,不用管; 如果a大于b的话:那么我们就让s中的第i项替换成b,接着就直接输出S就行了。 这样

【秋招笔试】9.07米哈游秋招改编题-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集 100+ 套笔试题,笔试真题 会在第一时间跟新 🍄 题面描述等均已改编,如果和你笔试题看到的题面描述

LeetCode 第414场周赛个人题解

目录 Q1. 将日期转换为二进制表示 原题链接 思路分析 AC代码 Q2. 范围内整数的最大得分 原题链接 思路分析 AC代码 Q3. 到达数组末尾的最大得分 原题链接 思路分析 AC代码 Q4. 吃掉所有兵需要的最多移动次数 原题链接 思路分析 AC代码 Q1. 将日期转换为二进制表示 原题链接 Q1. 将日期转换为二进制表示 思路分析

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

Python中差分进化differential_evolution的调用及参数说明

在场景应用中,要求我们的函数计算结果尽可能的逼近实际测量结果,可转化计算结果与测量结果的残差,通过最小化残差,便可求出最优的结果。但使用最小二乘等方法来计算时,常常会使迭代的结果显然局部最优点而导致结算错误。 差分进化原理 差分进化(Differential Evolution,DE)是一种基于群体差异的进化算法,其计算思想主要包括以下几个方面: 一、初始化种群 首先,随机生成一个初始种群

P2858 [USACO06FEB] Treats for the Cows G/S 题解

P2858 题意 给一个数组。每天把最左或者最右的东西卖掉,第 i i i个东西,第 d a y day day天卖出的价格是 a [ i ] ∗ d a y a[i]*day a[i]∗day。 记忆化搜索 void dfs(int l,int r,int day,ll sum){if(v[l][r]>=sum)return;v[l][r]=sum;if(l>r)//这就是dp答案{

【C++题解】1272. 郭远摘苹果

欢迎关注本专栏《C++从零基础到信奥赛入门级(CSP-J)》 问题:1272. 郭远摘苹果 类型:二维数组 题目描述: 郭远有一天走到了一片苹果林,里面每颗树上都结有不同数目的苹果,郭远身上只能拿同一棵树上的苹果,他每到一棵果树前都会把自己身上的苹果扔掉并摘下他所在树上的苹果并带走(假设郭远会走过每一棵苹果树),问在郭远摘苹果的整个过程中,他身上携带的最多苹果数与最小苹果数的差是多少?

【最新华为OD机试E卷-支持在线评测】机器人活动区域(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线评测,专栏文章质量平均 94 分 最新华为OD机试目录: https://blog.