【4.12日题解】——美国血统

简介: 【4.12日题解】——美国血统

☘前言☘

今日份水题开始。希望有想要提高的同学跟我们一起来刷题0.0

4.12日每日一题——美国血统


🧑🏻作者简介:一个从工业设计改行学嵌入式的年轻人

✨联系方式:2201891280(QQ)

⏳全文大约阅读时间: 20min


全文目录

☘前言☘

解题思路

📑写在最后

P1827 [USACO3.4] 美国血统 American Heritage


解题思路

这部分其实是考研的重点,太长时间不用都快忘记了,其实思路就是分割字符串,比如给的样例。


ABEDFCHG

CBADEFGH


分割之后的样子就应该是:


[ABEDF]C[HG]

C[BADEF][GH]


这个对应着代码去看下标就能理解了。


#include <cstdio>

#include <cstring>

#include <cstdlib>



struct node{
    char val;
    struct node *left, *right;
};
struct node *noot;
char zhongxu[30], prev[30];
void create(int zleft, int zright, int pleft,int pright,node **root){//生成树
    if(zleft > zright || pleft > pright)    return;//直接就是空啦
    int i,j;
    for(i = pleft, j = zleft;i < pright;i++,j++)    //查找分割点
        if(zhongxu[j] == prev[pleft]) break;
    (*root) = (struct node *)malloc(sizeof(struct node));   //建立节点
    node *p = *root;
    p->val = prev[pleft];
    p->left = p->right = NULL;
    create(zleft,j-1,pleft+1, i,&p->left);  //创建左子树
    create(j+1,zright,i+1,pright,&p->right);    //创建右子树
}
void hou(node *p){  //后续遍历
    if(p){
        hou(p->left);
        hou(p->right);
        putchar(p->val);
    }
}
int main(){
    scanf("%s %s",zhongxu,prev);
    node *root;
    create(0,strlen(zhongxu) - 1,0, strlen(prev) - 1,&root);
    hou(root);
}



相关文章
|
9月前
|
Go
golang力扣leetcode 417.太平洋大西洋水流问题
golang力扣leetcode 417.太平洋大西洋水流问题
59 0
|
8月前
|
C++
C++程序设计实践一上(题目来自杭州电子科技大学ACM)
C++程序设计实践一上(题目来自杭州电子科技大学ACM)
51 2
|
8月前
|
C++
C++程序设计实践一下(题目来自杭州电子科技大学ACM)
C++程序设计实践一下(题目来自杭州电子科技大学ACM)
56 1
leetcode 315周赛 解题报告
leetcode 315周赛 解题报告
79 0
|
移动开发
力扣264周赛题解
力扣264周赛题解
100 0
|
机器学习/深度学习 算法 程序员
江苏大学1024程序员节“我与算法有个约”活动 题面与题解
江苏大学1024程序员节“我与算法有个约”活动 题面与题解
160 0
江苏大学1024程序员节“我与算法有个约”活动 题面与题解
|
存储 人工智能 BI
P8597 [蓝桥杯 2013 省 B] 翻硬币个人思考总结+第五届传智杯ABC 初赛题解
桌上放着排成一排的若干硬币。我们用 `*` 表示正面,用 `o` 表示反面(是小写字母,不是零),比如可能情形是 `**oo***oooo`,如果同时翻转左边的两个硬币,则变为 `oooo***oooo`。现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?
193 0
力扣288周赛题解
第一题: 分析: 这道题呢,就是让你交换奇偶性相同的两个数字,让最后的值变成最大,解题 的方式有很多, 第一种能想到的就是一个数字一个数字的交换(同奇同偶),再进行比较,但是这种方法的可行性不高并且非常繁琐,稍有不注意就会少一种情况。 第二种方式就是开两个数组,通过求余数的方式,把奇数偶数分别放到不同的数组,把两个数组进行排序,再次遍历原来的数,判断每一位是技术还是偶数,从而从不同的数组中取出相应的大值,进行输出。 第三种就是利用双指针,所谓的双指针就是两层循环,外(i)层从开头开始遍历,内(j)层从末
92 0
力扣288周赛题解