备战 清华大学 上机编程考试-冲刺前50%,倒数第5天

news2024/12/29 10:26:40
T1:多项式求和

小K最近刚刚习得了一种非常酷炫的多项式求和技巧,可以对某几类特殊的多项式进行运算。非常不幸的是,小K发现老师在布置作业时抄错了数据,导致一道题并不能用刚学的方法来解,于是希望你能帮忙写一个程序跑一跑。给出一个 \(m\) 阶多项式\(\(f(x)=\sum_{i=0}^mb_ix^i\)\)对给定的正整数 \(a\) ,求\(\(S(n)=\sum_{k=0}^na^kf(k)\)\)由于这个数可能比较大,所以你只需计算 \(S(n)\) 对 \(10^9+7\) 取模后的值(即计算除以 \(10^9+7\) 后的余数)。

解:

涉及到:a*b整数相乘的优化, a^n的优化,

多项式的计算-一个for循环,

自然数的幂次求和公式-数学推导

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<stdio.h>
#include<stdlib.h>

using namespace std;
//计算多项式的值的题目:

//“轩轩”前辈的代码非常值得学习,故而尝试 自己 默记着 尝试复写

long long int n,m,a;
long long int mod = 1e9+7;
long long int *b;  //作为数组,之后可以开辟空间

//处理输入的函数:
void init_input()
{
    //给上述变量赋值 和 处理b0 - bn
    cin>>n>>m>>a;
    b = new  long long int[m+1];
    for(int i = 0 ;i<=m ;i++)
    {
        cin>>b[i];
    }
}

//处理 (a*b)%mod 的快速算法:
long long multiply(long long a,long long b , long long mod)
{
    long long ans = 0;
    //我觉得这里还可以优化:让b是那个小的数
    if(b > a)
    {
        long long tmp = b;
        b = a;
        a = tmp;
    }

    while(b > 0)
    {
        if(b&1 != 0)
        {
            //b是一个奇数:
            ans = (ans + a)%mod;
        }
        a = (a<<1 ) % mod;
        b = b>>1;
    }
    return ans;
}


//处理 a^n次方的 快速算法:
long long power(long long a, long long n , long long mod)
{
    long long ans = 1 ;
    //计算a的n次方:

    while(n > 0 )
    {
        if(n&1 != 0)
        {
            //奇数:
            ans = multiply(ans,a,mod);
        }
        n = n>>1;
        ans = multiply(ans,ans,mod);
    }
    return ans;
}


//计算 f(k) 的结果:
long long func(long long x)
{
    long long ans = 0;
    //而且,我觉得可以改进一点, 求x的i次方,可以用到x的i-1次方
    long long tmp = 1;
    for(long long  i = 0 ; i<=m ;i++)
    {
        ans = (ans + multiply(tmp,b[i],mod))%mod;
        tmp = multiply(tmp,x,mod) % mod ; 
    }
    return ans;
}



//最后,计算S(n)的求和结果
long long Sum()
{
    long long ans = 0;
    
    //改进:保留 a的k-1次方的结果:
    long long tmp = 1;
    for(long long  i = 0 ; i<=n ;i++)
    {
        ans = (ans + multiply(func(i),tmp,mod))%mod;
        tmp = (multiply(tmp,a,mod))%mod;

    }
    return ans;
}


int main()
{

    //处理输入:
    // int n,m,a;
    // cin>>n>>m>>a;

    // vector<int> vec(m+1,0);
    // for(int i= 0; i<= m; i++)
    // {
    //     cin>>vec[i];
    // }
    
    //朴素一点的方法进行计算——先做一个垃圾出来:
    //第一步:需要一个计算f(k) % mod
    //第二步:再计算S(n)

    //可以改进的地方:
    //1.(a*b)%mod 可以利用 2的幂次 以及 左移,右移优化
    //2.计算a^k次方, 可以利用 2的幂次进行优化
    //其他的话,暂时就只能那样子了

    init_input();
    cout<<Sum()<<endl;

    //虽然,样例9 和 样例10 我肯定是做不出来的,
    //但是,只要过了一些样例,就有分,为啥不干脆 “针对样例编程”?
    //要有针对性! -- 得分为王
    
    //第一:针对 a = 1的情况, —— 只要算f(k)求和即可
    //这里一定有更加高效的计算-可以合并 - 分治等
    //目前我的想法只有合并:
    if(a == 1)
    {
        //但是如果要开辟一个10^9次方的数组的话,开辟不了
        //nice,合并之后,感觉因为m很小,复杂度可以降低到O(n)
        //甚至,只要知道1次求和,2次求和,3次求和,4次求和公式。。。。妙!
        //参考:https://www.bilibili.com/read/cv11243219/
        //这个问题就是 “自然数”幂等和问题:
        //根据这个参考文章,基本就可以搞定所有a=1的case了
        //数学的美妙就在其中,而清华,必然是招收能够体会数学之美的学生
        //这里以m=2 , a =1 那个测试用例进行写代码:
        if(a == 1 && m==2)
        {   //别忘了 0 的 0次方是 1
            long long sum = (b[0]*(n+1) %mod+b[1]*(n*(n+1)/2)%mod+ b[2]*(n*(n+1)*(2*n+1)/6)%mod)%mod;
            cout<<sum<<endl;
        }

    }



    return 0 ;
}
T2:葱的战争--模拟题

一个n乘m的棋盘,上面有k根葱,每根葱面朝方向为d(0123分别表示上下左右),没跟葱一个战斗力f。每隔时间葱会向面朝方向走一格,如果遇到棋盘边界,那么他将把面朝方向转180度(此回合葱不会走动),如果某个时刻有两个或以上的葱在同一位置,那么他们将发生战争,只有战斗力最高的葱存活,其他的葱全部原地枯萎,不在走动,求经过t时间后所有葱的位置

输入:第一行n m k,然后接下来k行每根葱的信息x y d f(坐标,方向,战斗力),最后一行输入时间t 输出:k行,分别表示每个葱的位置。 数据范围:n和m在100内,k在1000内,t在1000内,f在1000内,保证初始每颗葱位置不同,战斗力不同。

解:

结合之前的开发经验,这一题和 “贪吃蛇”的项目基本类似:

直接使用 模拟的思想,——关键是记录 board[][]和 snake里面的数据:

测试用例:

输入:
5 4 2
1 1 3 10
3 1 2 5
3
输出:
4 1 
2 1

#include<iostream>
#include<string>
#include<vector>
#include<stdio.h>
#include<stdlib.h>

using namespace std;

struct cong
{
    int x;
    int y;
    int d;
    int f;
    //尝试写一个默认构造函数:
    cong()
    {
        this->x =0;
        this->y =0;   
        this->d =0;
        this->f =0;
    }
};

int n,m,k;
int t;

//算了,如果是二维数组的话,我还是老老实实的用int a[100][100]
//或者vector<vector<int> > vec(n,vector<int>(m,0))这种

int main()
{
    //这个就是一个简单的 模拟题目 搞定即可:
    //最关键一个点可能就是 数据如何存储的问题
    //处理输入 和 存储结构
    cin>>n>>m>>k;
    cong arr[1001];

    int flag[1001]; //用于记录这根是否存活,只有flag==0时,才需要更新
                    //cong的下标是从1开始用的
    for(int i = 1;i <=k ;i++) //arr从1开始用!!!cong的下标
    {
        cin>>arr[i].x>>arr[i].y>>arr[i].d>>arr[i].f;
    }
    cin>>t;

    //直接模拟t个时间-for循环-立即更新board数据 和 arr数据
    for(int i=1;i <=t ;i++)
    {
        //这里,设置一个board二维矩阵,nxm位置初始为0
        //之后,每次更新一个 活着的cong,在更新后的那里写上cong的下标
        //如果原来那个位置有非0的下标——>战斗->f小的那个flag设置为1,
        //坐标范围(0-n-1,0-m-1)
        //到达边界,下一个回合进行扭转,扭转也算做一步

        int board[101][101]; // 下标从0开始用,我估计是
        //调用
        for(int j = 1; j<=k;j++)
        {
            if(flag[j] != 0)
            {
                continue; //这根cong已经 不活了
            }
            //--否则进行更新:

            //上:
            if(arr[j].d == 0)
            {
                //是否到达上边界:
                if(arr[j].y == m-1) //我就按照正常的笛卡尔坐标来!之前那个贪吃蛇有点不同
                {
                    //修改arr[j].d即可
                    arr[j].d = 1;
                    //--判断board同一个位置是否需要战斗
                    if(board[arr[j].x][arr[j].y] != 0 )
                    {
                        //战斗:
                        int index = board[arr[j].x][arr[j].y];
                        if(arr[j].f > arr[index].f)
                        {
                            // j留下
                            board[arr[j].x][arr[j].y] = j;
                            flag[index] = 1;
                        }
                        else{
                            // index留下
                            flag[j] = 1;//阵亡
                        }
                    }
                    else{
                        //在board上面占一个坑位,等其他人过来
                        board[arr[j].x][arr[j].y] = j;
                    }
                }
                else{
                    //向上移动1格:
                    arr[j].y +=1;
                    //--判断board同一个位置是否需要战斗
                    if(board[arr[j].x][arr[j].y] != 0 )
                    {
                        //战斗:
                        int index = board[arr[j].x][arr[j].y];
                        if(arr[j].f > arr[index].f)
                        {
                            // j留下
                            board[arr[j].x][arr[j].y] = j;
                            flag[index] = 1;
                        }
                        else{
                            // index留下
                            flag[j] = 1;//阵亡
                        }
                    } 
                    else{
                        //在board上面占一个坑位,等其他人过来
                        board[arr[j].x][arr[j].y] = j;
                    }

                }
            }

            //下:
            else if(arr[j].d == 1)
            {
                //是否到达下边界:
                if(arr[j].y == 0) //我就按照正常的笛卡尔坐标来!之前那个贪吃蛇有点不同
                {
                    //修改arr[j].d即可
                    arr[j].d = 0;
                    //--判断board同一个位置是否需要战斗
                    if(board[arr[j].x][arr[j].y] != 0 )
                    {
                        //战斗:
                        int index = board[arr[j].x][arr[j].y];
                        if(arr[j].f > arr[index].f)
                        {
                            // j留下
                            board[arr[j].x][arr[j].y] = j;
                            flag[index] = 1;
                        }
                        else{
                            // index留下
                            flag[j] = 1;//阵亡
                        }
                    }
                    else{
                        //在board上面占一个坑位,等其他人过来
                        board[arr[j].x][arr[j].y] = j;
                    }
                }
                else{
                    //向下移动1格:
                    arr[j].y -=1;
                    //--判断board同一个位置是否需要战斗
                    if(board[arr[j].x][arr[j].y] != 0 )
                    {
                        //战斗:
                        int index = board[arr[j].x][arr[j].y];
                        if(arr[j].f > arr[index].f)
                        {
                            // j留下
                            board[arr[j].x][arr[j].y] = j;
                            flag[index] = 1;
                        }
                        else{
                            // index留下
                            flag[j] = 1;//阵亡
                        }
                    } 
                    else{
                        //在board上面占一个坑位,等其他人过来
                        board[arr[j].x][arr[j].y] = j;
                    }

                }
            }


            //左:
            else if(arr[j].d == 2)
            {
                //是否到达上边界:
                if(arr[j].x == 0) //我就按照正常的笛卡尔坐标来!之前那个贪吃蛇有点不同
                {
                    //修改arr[j].d即可
                    arr[j].d = 3;
                    //--判断board同一个位置是否需要战斗
                    if(board[arr[j].x][arr[j].y] != 0 )
                    {
                        //战斗:
                        int index = board[arr[j].x][arr[j].y];
                        if(arr[j].f > arr[index].f)
                        {
                            // j留下
                            board[arr[j].x][arr[j].y] = j;
                            flag[index] = 1;
                        }
                        else{
                            // index留下
                            flag[j] = 1;//阵亡
                        }
                    }
                    else{
                        //在board上面占一个坑位,等其他人过来
                        board[arr[j].x][arr[j].y] = j;
                    }
                }
                else{
                    //向左移动1格:
                    arr[j].x -=1;
                    //--判断board同一个位置是否需要战斗
                    if(board[arr[j].x][arr[j].y] != 0 )
                    {
                        //战斗:
                        int index = board[arr[j].x][arr[j].y];
                        if(arr[j].f > arr[index].f)
                        {
                            // j留下
                            board[arr[j].x][arr[j].y] = j;
                            flag[index] = 1;
                        }
                        else{
                            // index留下
                            flag[j] = 1;//阵亡
                        }
                    } 
                    else{
                        //在board上面占一个坑位,等其他人过来
                        board[arr[j].x][arr[j].y] = j;
                    }

                }
            }


            //右:
            else if(arr[j].d == 3)
            {
                //是否到达上边界:
                if(arr[j].x == n-1) //我就按照正常的笛卡尔坐标来!之前那个贪吃蛇有点不同
                {
                    //修改arr[j].d即可
                    arr[j].d = 2;
                    //--判断board同一个位置是否需要战斗
                    if(board[arr[j].x][arr[j].y] != 0 )
                    {
                        //战斗:
                        int index = board[arr[j].x][arr[j].y];
                        if(arr[j].f > arr[index].f)
                        {
                            // j留下
                            board[arr[j].x][arr[j].y] = j;
                            flag[index] = 1;
                        }
                        else{
                            // index留下
                            flag[j] = 1;//阵亡
                        }
                    }
                    else{
                        //在board上面占一个坑位,等其他人过来
                        board[arr[j].x][arr[j].y] = j;
                    }
                }
                else{
                    //向右移动1格:
                    arr[j].x +=1;
                    //--判断board同一个位置是否需要战斗
                    if(board[arr[j].x][arr[j].y] != 0 )
                    {
                        //战斗:
                        int index = board[arr[j].x][arr[j].y];
                        if(arr[j].f > arr[index].f)
                        {
                            // j留下
                            board[arr[j].x][arr[j].y] = j;
                            flag[index] = 1;
                        }
                        else{
                            // index留下
                            flag[j] = 1;//阵亡
                        }
                    } 
                    else{
                        //在board上面占一个坑位,等其他人过来
                        board[arr[j].x][arr[j].y] = j;
                    }

                }
            }

        }
    }
    
    //输出k行,也就是最后的k根cong的位置
    for(int i =1 ;i<=k ;i++)
    {
        cout<<arr[i].x<<" "<<arr[i].y<<endl;
    }

    return 0;
}
 T3:路径个数

有n个点,每个点有一个权值,每两点间的不同边的个数为他们权值相与得到的值的二进制数字中的1的个数(边为有向边,有第i指向第j,i小于j)求第1个点到第n个点的路径个数(当且仅当不止一条边不同才被称为两条不同的路径),由于数据很大,对991247取模。

输入:第1行n,第二行分别试每个点权值 输出:路径个数 数据范围:n在2e5内,权值大小在1e9内

解:

(1)补充:<bitset>库中的使用示例:

#include <iostream>
#include <bitset>

int main() {
    // 定义一个包含8位的bitset,初始化所有位为0
    std::bitset<8> bitset1;
    
    // 通过下标赋值
    bitset1[0] = 1; // 设置第一位为1
    bitset1[3] = 1; // 设置第四位为1
    
    // 输出bitset
    std::cout << "Bitset1: " << bitset1 << std::endl; // 输出可能是 "00010010"
    
    // 通过整数初始化
    std::bitset<8> bitset2(7); // 二进制表示为 00000111
    
    std::cout << "Bitset2: " << bitset2 << std::endl; // 输出 "00000111"
    
    // 通过字符串初始化
    std::bitset<8> bitset3("10101010");
    
    std::cout << "Bitset3: " << bitset3 << std::endl; // 输出 "10101010"
    
    // 访问和修改
    std::cout << "Third bit of bitset3: " << bitset3.test(2) << std::endl; // 输出1,因为第三位是1
    bitset3.flip(2); // 翻转第三位
    std::cout << "After flipping third bit: " << bitset3 << std::endl; // 输出可能是 "10101000"
    
    // 操作
    std::bitset<8> bitset4("11110000");
    std::cout << "Bitset4 & bitset2: " << (bitset4 & bitset2) << std::endl; // 位与操作
    std::cout << "Bitset4 | bitset2: " << (bitset4 | bitset2) << std::endl; // 位或操作
    std::cout << "Bitset4 ^ bitset2: " << (bitset4 ^ bitset2) << std::endl; // 位异或操作
    
    return 0;
}

(2)更正参考解法:

//路径:
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<stdio.h>
#include<stdlib.h>

using namespace std;

//不要想那么多,置之死地而后生,对得起自己的money和精力即可,结果不要管他
//成为一个正在的编程算法强者,用思考力证明自己,这东西到哪都很有用!
//这一题很有意思,关键当然是 如何计算 “权值 与运算 后,二进制1的个数”
vector<int> power;
int n;

void init()
{
    cin>>n;
    for(int i = 0;i<n ;i++)
    {
        int tmp;
        cin>>tmp;
        power.push_back(tmp);
    }
}

//写一个函数:输入2个整数, 输出 计算出1的个数:
//注意:调用bitset库 和 不调用库实现:
int count1(int a,int b)
{
    int ans = 0 ;
    int tmp = a&b;
    while(tmp>0)
    {
        if(tmp&1 !=0)  // 或者 tmp%2 == 1
        {
            ans++;
        }
        tmp = tmp>>1;
    }
    return ans;

}

//第二个关键点:让我想起了 罗文寒 的那个 5=1+1+1+1+1的个数那个,递归思想

//这一题我不太能接受,我给一个测试用例吧,如果对了还好,不对就自己再想一个:
//果然,就是有问题 —— 估计是题目给错了,不过,那我不如将错就错的写一写
int calc(int n )
{
    if(n == 1)
    {
        return 2;
    }
    else{
        return 2+calc(n-1)*2;
    }
}

//我的解法的测试用例:其中i与j之间都是2条路:
int calc2(int i , int j)
{
    if( i == j )
    {
        return 1;
    }
    else{
        int ans = 0;
        for(int k = i+1; k<=j ;k++)
        {
            ans =(ans + 2*calc2(k,j))%991127;
        }
        return ans;

    }
}

//下面这个是作为 该题答案
int mycalc(int i , int j)
{
    //i是小的那个起点 , j是大的那个终点:
    //递归出口:
    if( i == j)
    {
        return 1;
    }
    else
    {
        int ans = 0;
        for(int k = i+1; k<=j ;k++)
        {
            ans =(ans + count1(power[i],power[k])*mycalc(power[k],power[j]))%991127;
        }
        return ans;
    }

}


int main()
{
    cout<<calc(3)<<endl;       //输出14 -不对
    cout<<calc2(0,3)<<endl;    //输出18 -这才对

    return 0;
}

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

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

相关文章

SpringBoot+Vue体育馆管理系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 角色对应功能 学生管理员 功能截图

计算机网络 期末复习(谢希仁版本)第4章

路由器&#xff1a;查找转发表&#xff0c;转发分组。 IP网的意义&#xff1a;当互联网上的主机进行通信时&#xff0c;就好像在一个网络上通信一样&#xff0c;看不见互连的各具体的网络异构细节。如果在这种覆盖全球的 IP 网的上层使用 TCP 协议&#xff0c;那么就…

144、二叉树的前序递归遍历

题解&#xff1a; 递归书写三要素&#xff1a; 1&#xff09;确定递归函数的参数和返回值。要确定每次递归所要用到的参数以及需要返回的值 2&#xff09;确定终止条件。操作系统也是用栈的方式实现递归&#xff0c;那么如果不写终止条件或者终止条件写的不对&#xff0c;都…

从哲学层面谈稳定性建设

背景 我&#xff08;姓名&#xff1a;黄凯&#xff0c;花名&#xff1a;兮之&#xff09;在阿里工作了五年&#xff0c;一直在一个小团队从事电商的稳定性工作。看了很多稳定性相关的文档&#xff0c;很少有能把稳定性说明白的文档。也有一些文档也能把涉及的方方面面说清楚&a…

办理公司诉讼记录删除行政处罚记录删除

企业行政处罚记录是可以做到撤销消除的&#xff0c;一直被大多数企业忽略&#xff0c;如果相关诉讼记录得不到及时删除&#xff0c;不仅影响企业招投标&#xff0c;还影响企业的贷款申请&#xff0c;严重的让企业资金链断裂&#xff0c;影响企业长远发展和企业形象。行政处罚是…

配置网页版的SQL Developer : Oracle Database Actions

我们知道SQL Developer有三种形式&#xff1a; 桌面版&#xff0c;这个最常用命令行版&#xff0c;即SQLcl网页版&#xff0c;即SQL Developer Web&#xff0c;最新的名字叫Oracle Database Actions&#xff0c; 本文讲述3&#xff0c;如何配置SQL Developer网页版。 第一步…

【面向就业的Linux基础】从入门到熟练,探索Linux的秘密(一)

主要帮助大家面向工作过程中Linux系统常用的命令联系&#xff0c;采用极致的实用主义&#xff0c;帮助大家节省时间。 文章目录 前言 一、linux系统 二、linux系统基本命令 1.Linux系统的目录结构 2. 常用命令介绍 3.命令演示 4.作业练习 总结 前言 主要帮助大家面向工作过程中…

「动态规划」打家劫舍的变形题,你会做吗?

213. 打家劫舍 IIhttps://leetcode.cn/problems/house-robber-ii/description/ 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈&#xff0c;这意味着第一个房屋和最后一个房屋是紧挨着的。同时&#x…

C++ Easyx案例实战:Cookie Maker工作室1.0V

前言 //制作属于自己的工作室&#xff01; 注&#xff1a;运行效果以及下载见Cookie Maker 工作室成立程序。 关于Cookie Maker工作室成立的信息&#xff0c;I am very happy&#xff08;唔……改不过来了&#xff09;。 OKOK&#xff0c;第一次用图形库写程序&#xff08;图形…

基于Simulink的双端行波测距

1 输电线路故障仿真模型 基于双端行波测距理论&#xff0c;在MATLAB软件中搭建的三相50Hz的输电线路故障仿真模型如图1所示&#xff0c;该模型包含了三相电源、输电线路、故障发生器和示波器模块等。主要仿真参数设置如下:仿真时间为 0~0.1s,采用固定步长 10-7和ode3 算法&…

knoXSS(case01~10)

case 01: 先在每个框里都输入:<script>alert(1)</script> 检查源码 这里第三个和第四个点都被处理过了&#xff0c;所以先考虑第一个和第二个点 这里试了一下&#xff0c;发现GET也能传参&#xff0c;所以构造 成功 case 02: 这里发现变量a和这个似乎有关联&…

【C语言】Leetcode-312 戳气球

文章目录 题目思路代码如下 题目 链接: Leetcode-312 戳气球 思路 我们观察戳气球的操作&#xff0c;发现这会导致两个气球从不相邻变成相邻&#xff0c;使得后续操作难以处理。于是我们倒过来看这些操作&#xff0c;将全过程看作是每次添加一个气球。 首先 我们需要创建一个…

社交“学习伙伴”:Meta Llama助力对话升级

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【数据结构】排序——插入排序,选择排序

前言 本篇博客我们正式开启数据结构中的排序&#xff0c;说到排序&#xff0c;我们能联想到我之前在C语言博客中的冒泡排序&#xff0c;它是排序中的一种&#xff0c;但实现效率太慢&#xff0c;这篇博客我们介绍两种新排序&#xff0c;并好好深入理解排序 &#x1f493; 个人主…

HCIA--NAT地址转换(复习)

先交换后路由&#xff1a; 1&#xff1a;在交换机上创建vlan&#xff0c;进入接口划分vlan&#xff0c;接着在交换机连接路由器的接口上建立trunk干道 2&#xff1a;在路由器上&#xff0c;先配置物理接口IP&#xff0c;接着在路由器上创建两个子接口&#xff0c;将建立的vla…

100道面试必会算法-32-二叉树右视图用栈实现队列

100道面试必会算法-32-二叉树右视图&用栈实现队列 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4]示例 2: 输入: [1,n…

powershell:使用IProgressDialog接口创建windows标准进度对话框。

禁止任何形式的抄录&#xff0c;转载请附上本文章地址 Add-Type using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Runtime.InteropServices; // 定义ProgressDialog类&#xff0c;实现IProgressDialog接口 …

数据库之PostgreSQL详解

一、PostgreSQL介绍 PostgreSQL是一个功能强大的 开源 的关系型数据库。底层基于C实现。 PostgreSQL的开源协议和Linux内核版本的开源协议是一样的。。BDS协议&#xff0c;这个协议基本和MIT开源协议一样&#xff0c;说人话&#xff0c;就是你可以对PostgreSQL进行一些封装&a…

K210视觉识别模块学习笔记5:(嘉楠)训练使用模型_识别人脸

今日开始学习K210视觉识别模块:(嘉楠)训练与使用模型_识别人脸 亚博智能的K210视觉识别模块...... 固件库版本: canmv_yahboom_v2.1.1.bin 之前的训练网址部署模型时需要我们自己更换固件&#xff0c;而且还不能用亚博的图像操作库函数了&#xff0c;这十分不友好&#xff0…

vue3关于配置代码检查工作流,husky出现创建错误问题的解决方法

关于配置代码检查工作流&#xff0c;husky出现error: cant create hook, .husky directory doesnt exist (try running husky install) 首先根据截图发现最明显的信息是error&#xff0c;中文译为-----错误&#xff1a;无法创建钩子&#xff0c;.husky 目录不存在&#xff08;尝…