UVA__12166 - Equilibrium Mobile(树)

本文介绍了一种用于判断二叉树是否平衡的算法,并详细解释了如何通过递归方式计算最小权重变化数来实现平衡调整。此外,还提供了一个完整的C++实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


Input
On the rst line one positive number: the number of testcases, at most 100. After that per testcase: • One line with the structure of the mobile, which is a recursively dened expression of the form:
< expr > ::= < weight > | "[" < expr > "," < expr > "]"
with < weight > a positive integer smaller than 109 indicating a weight and ‘[< expr >,< expr >]’ indicating a rod with the two expressions at the ends of the rod. The total number of rods in the chain from a weight to the top of the mobile will be at most 16.
Output
Per testcase: • One line with the minimum number of weights that have to be changed.
Sample Input
3 [[3,7],6] 40 [[2,3],[4,5]]
Sample Output
1 0 3

就是一个二元树,问你是否两边平衡;

这个比较题 大佬是这样想的,找到所有的儿子数,然后根据他的深度进行处理 ,   该点值*2*2*2~,寻找最大的重复数,用儿子数减去最大的重复数,即是 最小的改变数


#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<sstream>
#include<iterator>
#include<algorithm>
#include<string>
#include<map>
typedef long long ll;
typedef unsigned long long llu;
const int MAXN = 1000000 + 10;
using namespace std;
char s[MAXN];
map<ll, int> mp;
map<ll, int> ::iterator it;
int cnt;//叶子结点总数
void dfs(int st,int et,int deep)
{
    if(s[st]=='[')
    {
        
        int p=0;
        for(int i=st+1;i<=et;i++)   
        {
            if(s[i]=='[') p++;
            if(s[i]==']')p--;
            if(!p&&s[i]==',')
            {
                dfs(st+1,i-1,deep+1);//处理前面的
                dfs(i+1,et-1,deep+1);//处理后面
            }
        }
    }
    else
    {
        cnt++;
        ll sum=0;
        for(int i=st;i<=et;i++)  //因为会有112 这种多位数的出现,所以要循环变数
        {
            sum=sum*10+s[i]-'0';
        }
        //cout<<" "<<sum<<endl;
        mp[sum<<deep]++;   //*2
    }
}
int main(){
    int T;
    scanf("%d", &T);
    while(T--)
    {
        scanf("%s",s);
        int l=strlen(s);
        cnt=0;
        mp.clear();
        int ans=0;//重复数
        dfs(0,l-1,0);
        for(it=mp.begin();it!=mp.end();it++)
        {
            ans=max(ans,(it->second));
        }
        cout<<(cnt-ans)<<endl;
    }
    return 0;
}

     今天上午有点疯狂,不想学习,不想敲代码,没有理智,(本来是想去复习的),结果到北门骑着个小黄车就走了,骑到山边,听着歌傻了一路,但是到山边的时候特别爽,把歌关掉,听听鸟鸣,瞬间心情变好冷静了下了。然后转身回学校的时候,下坡,那是真的爽,非常爽,忍不住的放声高唱啦啦啦啦,瞬间心情变好,回来就去了机房,

话说大家最近很奇异,

惊!!!某高校ACM队集体思春!!!

怕是有毒哈哈哈,心情好了就好好敲代码啦,毕竟现在还是垃圾的一比,不能放松

<think>好的,我现在需要帮助用户理解PLINK命令中各个参数的作用,特别是--missing、--freq、--hardy,以及--bfile、--allow-extra-chr、--chr-set这些参数。首先,我要回顾之前用户的问题和我的回答,确保这次回答保持一致,并参考用户提供的站内引用。用户之前询问了一个PLINK命令的作用,涉及geno、mind、maf等参数,现在他们想了解其他参数的功能。当前问题包括--bfile、--allow-extra-chr、--chr-set、--missing、--freq、--hardy。我需要逐一解释这些参数,并确保引用之前的引用内容,比如引用[1]提到--bfile用于二进制文件,引用[3]提到转换文件格式节省空间。 首先,处理--bfile参数。根据引用[1],用户知道--bfile代替--file来读取二进制文件,所以我需要解释这是输入二进制格式的基础文件集,如bed、bim、fam。然后,--allow-extra-chr允许非常规染色体编号,这在处理非人类或特殊数据时有用,比如引用[3]提到的处理不同物种的数据可能需要这个参数。--chr-set则设置染色体数量,比如用户之前例子中的39条,适用于动物数据,如狗(39对染色体)。 接下来是分析类参数:--missing、--freq、--hardy。--missing生成缺失率报告,包括样本和SNP的缺失情况,之前用户的问题中提到了geno和mind参数,这里可以关联,说明这些报告可能用于后续的过滤步骤。--freq计算等位基因频率,生成.frq文件,这在关联分析中很重要,比如MAF过滤,用户之前问过maf参数,可以引用[2]中的例子,其中使用了--freq来统计频率。--hardy进行哈迪-温伯格平衡检验,生成.hwe文件,帮助识别偏离HWE的SNP,可能与质量控制中的hwe参数相关,用户之前用了--hwe1e-6,所以需要说明这个检验的结果用于过滤。 然后,需要生成相关问题,结合用户之前的问题,比如其他质量控制参数、HWE检验的意义,以及二进制文件的优势。例如,用户之前问过geno、mind、maf,现在可以问其他质量控制参数;或者HWE检验在QC中的作用;或者为什么使用二进制文件,这可能涉及引用[3]提到的节省空间。在撰写过程中,要确保数学公式正确使用LaTeX,如哈迪-温伯格公式用$$...$$,等位基因频率用$...$。同时,引用标记要自然,例如在解释--bfile时引用[1],在--freq时引用[2],在--allow-extra-chr时引用[3]。最后,检查是否有遗漏的参数,确保每个参数都有清晰的功能说明,并结合用户之前的上下文,使回答连贯。可能还需要指出这些参数在流程中的位置,比如--bfile通常在初始数据读取时使用,而--missing、--freq、--hardy属于分析步骤,结果可能用于后续过滤。</think>### PLINK参数功能解析 以下是PLINK命令中指定参数的详细功能说明: --- #### **基础文件操作参数** 1. **`--bfile`** - **功能**:指定输入的PLINK二进制文件前缀(`.bed`/`.bim`/`.fam`)。 - **作用**:替代`--file`参数,直接读取二进制格式文件,提升数据处理效率[^1]。 - **示例**: ```bash plink --bfile data --missing --out qc ``` 2. **`--allow-extra-chr`** - **功能**:允许读取非标准染色体编号(如`chrX`、`chrUn`等)。 - **作用**:处理非人类或特殊注释的基因组数据时,避免因染色体命名不规范导致的报错[^3]。 3. **`--chr-set`** - **功能**:设置染色体数量及类型(例如动物基因组)。 - **作用**:如`--chr-set 39 no-xy`表示染色体总数为39对,且不包含性染色体(X/Y),适用于犬类等物种[^3]。 --- #### **数据分析参数** 4. **`--missing`** - **功能**:生成样本和SNP的缺失率报告。 - **作用**: - 输出文件:`.imiss`(个体缺失率)、`.lmiss`(SNP缺失率)。 - 用于后续过滤低质量样本或位点(如`--mind 0.1`、`--geno 0.1`)[^1]。 - **示例公式**: 个体缺失率计算: $$ \text{MissingRate}_{\text{个体}} = \frac{\text{缺失的SNP数}}{\text{总SNP数}} $$ 5. **`--freq`** - **功能**:计算等位基因频率(Allele Frequency)。 - **作用**: - 输出文件:`.frq`,包含每个SNP的次要等位基因频率(MAF)。 - 用于过滤低频变异(如`--maf 0.01`)或分析群体遗传结构[^2]。 - **公式**: $$ \text{MAF} = \frac{\text{次要等位基因计数}}{2 \times \text{样本数}} $$ 6. **`--hardy`** - **功能**:执行哈迪-温伯格平衡(Hardy-Weinberg Equilibrium, HWE)检验。 - **作用**: - 输出文件:`.hwe`,包含每个SNP的HWE $p$ 值。 - 识别偏离HWE的SNP(如`--hwe 1e-6`过滤异常位点),常用于质量控制[^1]。 - **检验公式**: $$ \chi^2 = \sum \frac{(O_i - E_i)^2}{E_i} $$ 其中$O_i$为观察基因型频率,$E_i$为期望频率。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值