寒武纪测试赛E题题解-Travel

寒武纪2018年 IC校招笔试题目 前言 后面,打算整理下数字ic笔试面试题目,希望以此为出发点,补充知识点! 声明:个人觉得,学习期间,基本上都是知识的搬运,所以本博客所有内容都可以被大家引用!为了大家方便引用,博客内的图片都没有加博客的水印(除非不是自己的或者没看到)! 这篇文章会基于下面这些文件整理,并参考寒武纪2018年 校招IC设计笔试题,希望大家有所了解。 本文的ppt,请点击链接下载! 寒武纪 寒武纪官网www.cambricon.com ... 阅读详情

这个博客不再更新,新博客地址请戳

链接:http://aiiage.hustoj.com/contest.php?cid=1000

题意:
给你n(n<=3000)个点 n-1 条边的一棵树,每条边有一个权值w(w<=1000),现在有Q个询问:在距离mod k的意义下,距离 u 点最远的点有多远?

第一行输入n,表示n个点
接下来n-1行,输入u,v,w,表示一条边,w是权值,点从1开始
输入一个Q,表示询问次数(Q<=1e5)
接下来Q行,输入u,k(2<=k<=100)

对于每次询问,输出在距离mod k的意义下,距离 u 点最远的点有多远

样例如下:

输入:
3
1 2 7
1 3 6
5
1 9
1 7
3 2
3 15
2 7

输出:
7
6
1
13
6

思路1:暴力算出所有点对 (u,v)之间的距离dis[u][v],对于每次询问(u,k),遍历一遍
dis[u][i]%k的值,取大。
时间复杂度:O(nn + Qnk) ,超时
空间复杂度:O(n
n)

思路2:暴力算出所有点对(u,v)之间的距离dis(u,v),再算出对于每个可能的k值取模后的结果,在这个过程中对得到的结果取大。
时间复杂度:O(nnk+Q),超时
空间复杂度:O(n*k)

思路3:
1.我们把无根树看成有根树

2.对于结点u,满足mod k距离最大的结点要么在 u 的子树上,要么在 u 的父亲那头,我们先求在 u 的子树上的满足情况。(后面再解释)

3.设dp1[u][j][k]表示对于结点u,在u的子树上,满足距离%k 后,与 u 距离为 j 的结点数。

4.那么dp1[u][j][k]应该等于所有dp1[v][(j-w%k+k)%k][k]之和,其中v表示u的儿子,w表示(u,v)的距离。
为什么是(j-w%k+k)%k?
要得到u与v的子树里距离是j的结点个数,已知u与v距离为w,那么问题就变成了求v与v的子树里距离是j-w的结点个数。

5.知道子树里的还不行,我们不难得出,除了root之外,所有其他结点都还没考虑父亲另一头的结点。

6.这时候我们设dp[u][j][k]表示满足 dis(u,v)%k==j 的v的总个数。

7.我们已知子树里满足条件的结点数了,那么如何求出剩余的呢?设dis(u,u的父亲)=w,则父亲那头与u距离为j的结点数是:dp[father u][(j-w+k)%k][k]个。

8.这时候我们发现对于u的父亲,距离为j-w的结点不只是从另一边得到,还可能从u的子树得到,因此我们要减去这一部分重复的。设距离u的父亲为j-w的结点为v,所以dis(v,father u)==j-w,又知道dis(father u,u)==w,所以dis(u,v)的距离为j-2w,从前面已知
dp1[u][(j-2*w%k+k)%k][k],因此可以得到

	dp[v][j][k]=dp1[v][j][k]+
                dp[u][(j-w%k+k)%k][k]-
                dp1[v][(j-(2*w)%k+2*k)%k][k];

时间复杂度:O(nkk+Qk)
空间复杂度:O(n
k*k),如果用int会爆内存,在不影响答案正确性的情况下,把int改为short,就不会爆内存了

#include <bits/stdc++.h>
using namespace std;
struct node
{
    short v,w;
    node(){}
    node(int v,int w):v(v),w(w){}
};
int ans[3001][101];
vector<node> g[3001];
short dp1[3001][101][101];
short dp[3001][101][101];
short fa[3001];
void getfa(int u,int pre)
{
    int w;
    for(int i=0;i<g[u].size();i++)
    {
        int v=g[u][i].v;
        if(v==pre){w=g[u][i].w;continue;}
        fa[v]=u;
        getfa(v,u);
    }
    if(pre==-1)
    {
        for(int k=2;k<=100;k++)
            for(int j=0;j<k;j++)
                dp[u][j][k]+=dp1[u][j][k];
    }
    else
    {
        for(int k=2;k<=100;k++)
            for(int j=0;j<k;j++)
                dp1[pre][j][k]+=dp1[u][(j-w%k+k)%k][k];
    }
}
 
void dfs(int u)
{
    for(int i=0;i<g[u].size();i++)
    {
        int v=g[u][i].v,w=g[u][i].w;
        if(v==fa[u])continue;
        for(int k=2;k<=100;k++)
            for(int j=0;j<k;j++)
                dp[v][j][k]=dp1[v][j][k]+
                            dp[u][(j-w%k+k)%k][k]-
                            dp1[v][(j-2*(w%k)+2*k)%k][k];
        dfs(v);
    }
}
 
int main()
{
    int n;
    scanf("%d",&n);
    int u,v,w;
    for(int i=1;i<n;i++)
    {
        scanf("%d%d%d",&u,&v,&w);
        g[u].push_back(node(v,w));
        g[v].push_back(node(u,w));
    }
    for(u=1;u<=n;u++)
        for(int k=2;k<=100;k++)
            dp1[u][0][k]=1;
    getfa(1,-1);
    dfs(1);
    for(u=1;u<=n;u++)
    {
        for(int k=2;k<=100;k++)
        {
            for(int j=k-1;j;j--)
            {
                if(dp[u][j][k])
                {
                    ans[u][k]=j;
                    break;
                }
            }
        }
    }
 
    int q;
    scanf("%d",&q);
    while(q--)
    {
        scanf("%d%d",&u,&w);
        printf("%d\n",ans[u][w]);
    }
    return 0;
}
 
/**************************************************************
    Problem: 1005
    User: xtuacm1
    Language: C++
    Result: 正确
    Time:1130 ms
    Memory:122556 kb
****************************************************************/
面试人员笔试性格测试题 用来测试面试者的性格类型,可以根据不同的性格安排不同的工作岗位 立即下载

相关推荐

国央企创新负责人如何通过平台实现科研成果的快速识别与转化?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

【秋招机试真题】寒武纪0919机试

第一题: 题目描述: 寒武纪OJ比赛,定义了如下分数处理规则 | 每个参加者的分数范围都是[0, 100] | 分数低于40分的为不及格成绩 HR小姐姐为了统计方便,会对比赛的分按照下面规则处理: | 如果分数距离下一个5的倍数的插值小于3,则将这个分数向上对齐到5的倍数 说明:这题白给的,不废话了。 AC 直接上代码: #include<iostream> using namespace std; int process(int score) { if (score

weixin_42669700的博客 439

地磁场仿真与导航方案设计

地磁场仿真与导航方案设计 地磁场作为地球的固有资源,为航空、航天、航海提供了天然的坐标,可应用于航天器、航空飞行器和舰船等载体的定位、定向及姿态控制。本文依据地磁场的球谐模型,利用Matlab工具,设计了计算任意地点地磁场的程序,对仿真结果与实际数据进行对比分析;并选定一组卫星的数据,结合卫星的运动轨道,描绘90分钟内卫星处地磁总强度/矢量随轨道变化曲线,据此设计一种卫星地磁导航方案。 一、地磁场计算原理 1.1.球谐模型与球谐系数 地磁学的基本问题之一就是用数学表达式将地磁要素的地面分布表示成地理坐标的函

PRQKKK的博客 7408

寒武纪笔试题--非整除集合

表示没做出来,问了别人。 给定一个由正整数组成的集合S,找出一个最大的子集合S·,使得S·中任意两个数字的和都不能被K整除。例如S=「10,10,12,19,22,24,25」,K=4。S·的可能取值为「10,12,25」或者「19,22,25」等,S·最多只能取3个数。 输入描述: 输入为两行,第一行两个数字,分别表示集合S的元素数量N和K。第二行为N个数字,分别是S的各个元素值。 1<N...

summer2day的博客 1207

小程序 video 控制器外观调整_Kessil 360X Tuna Sun无线控制器使用分享

之前分享了Kessil 360X Tuna Sun开箱记录,时间关系,没来得及使用WiFi Dongle无线控制器。昨晚抽空实操了一下,做个操作记录,希望对大家有参考Kessil无线模块操作指南官方视频英文教程配中文字幕,非常详尽语速较快,重点位置可以暂停操作点击边框调出视频工具条1、拆包取控制器,保存二维码Kessil WiFi Dongle包装打开包装就能看到Kessil无线控制模...

weixin_39759060的博客 4733

madgwick算法基于MPU9250姿态融合漂移问题的原因

基于MPU9250的madgwick算法姿态漂移问题原因 0、声明 因为这个是现象是不是共性目前本人还没研究过,只是在个体问题研究的基础上得出的结论,或许我买到的MPU9250是一个盗版:),所以只具备参考性。 1、现象 使用MPU9250的加速度计、角速度计、磁力计(AK8963)原始数据输入到madgwick算法中,得到的姿态最终会在停止姿态变化后仍然漂移一小段时间。其中加速度计和角速度计读取速率为400hz,磁力计为100hz,加速度计采样范围±2g,角速度计采样范...

GreedyZombie的博客 3872

【秋招机试】寒武纪-最长公共子串-C++|方法1:经典DP:

题目描述: 给定两个字符串str1和str2,输出两个字符串的最长公共子串,如果最长公共子串为空,输出-1输入描述: 输入包含两行,第一行代表字符串str1,第二行代表字符串str2。(1<=length(str1),length(str2)<=5000)输出描述: 输出包含一行,代表最长公共子串 示例1: 输入描述: 1AB2345CD 12345EF 输出描述: ...

weixin_42669700的博客 557

[QDS]从零开始,写第一个Qt Design Studio到程序调用的项目

最近在使用Qt Design Studio进行开发,但是简中网上要不就是只搜得到Qt Designer(Qt Creator内部库),要不就只搜得到一点营销号不知道从哪里搬来的账号,鉴于Qt Design Studio是一个这么强大的软件,自然是需要来进行一下小小的实践的。所以开了这篇文章,方便没有使用过Qt Design Studio 和 QML的开发者也可以快速上手QDS(Qt Design Studio)。在本文中,你将学会如何使用QDS开发一个简单的QML程序,与你的C++后端代码进行交流。

Andius的博客 8213

上海寒武纪线上编程笔试

调试花的时间长了,死在了pattern.findall()返回的是一个list类型值!!最长公共子串描述给出两个字符串,找到最长公共子串,并返回其长度。输入描述输入两个任意长度的英文字符串输出描述返回公共字符串的长度样例输入 1 A=“ABCD”,B=“CBCE”样例输出 12import repattern = re.compile('“(.*)”')  #由于输入一串字符串,这里设置一个正则匹...

菜萌柴的博客 3696

Flannel,Calico 和 Cilium 之间有哪些优缺点和差别?

例如,在一个多租户的容器集群中,可以通过Calico为不同租户的容器设置精细的访问控制策略,确保每个租户的资源安全。例如,在设置复杂的网络策略和BGP路由时,需要对网络概念和Calico的配置语法有比较深入的了解。它可以根据容器的标签、服务等信息来定义访问规则,并且可以实现更加细粒度的网络安全策略,如HTTP层的策略。性能损耗:在overlay网络模式下(如VXLAN),由于需要对数据包进行额外的封装和解封装操作,会带来一定的性能损耗,尤其是在高流量的场景下,这种性能损耗可能会更加明显。

chinansa的博客 1529

把 SM30 用顺:从表设计到权限与传输,全面掌握 SAP Table Maintenance Generator

摘要 SAP的Table Maintenance Generator(TMG)是为配置表维护需求设计的经典工具,能够生成标准化的维护对话框(SM30)。它支持单表、维护视图(多表关联)和视图簇(导航式维护)三种维护对象类型。使用TMG前需注意三个关键设置:1)表维护权限选项;2)交付类(决定数据传输行为);3)客户端字段配置。通过SE54/SE11生成维护对话框时,需选择维护类型(一步/两步)和记录例程(控制传输)。TMG生成的对象包含函数组、屏幕和处理模块,但部分标准框架不可修改。实际应用中,可通过参数事

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 176

寒武纪一面

1.vector中resize() 和 reserve() 函数的区别? reserve 容器预留空间 ,但并不真正创建对象,在创建对象前,不能引用容器内元素, 因此加入元素后,需要push_baxck() 和 insert()函数 resize() 改变容器大小,并且创建对象。调用函数后,可以直接引用容器内对象。 reserve()只有一个参数, 即需要预留容器的空间 res

Steve_Abelieve 4041

UE5实现物体高亮描边效果(含UE相关源码浅析)

UE5实现物体高亮描边效果

专注GIS开发 7334

寒武纪测试赛1 C(取模和整除的性质 经典)

problem 对于一个数对(a,b)(a,b) ,如果满足a%b=a/ba \% b = a/b,则称这个数对为“好的数对”。 如果 a⩽n,b⩽na\leqslant n,b\leqslant n,那么有多少对数对是“好的数对”呢? 1⩽n⩽1e91\leqslant n\leqslant 1e9 pdf题面 Sample Input 5 8 3 65 Sample

Feynman1999的博客 749

【YOLOv8改进 - 注意力机制】GAM(Global Attention Mechanism):全局注意力机制,减少信息损失并放大全局维度交互特征

为了提高各种计算机视觉任务的性能,研究了多种注意力机制。然而,现有方法忽视了保留通道和空间两个方面信息的重要性,以增强跨维度的交互。因此,我们提出了一种全局注意力机制,通过减少信息损失和放大全局交互表示来提升深度神经网络的性能。我们引入了带有多层感知器的3D排列用于通道注意力,同时结合了卷积空间注意力子模块。在CIFAR-100和ImageNet-1K上的图像分类任务评估中,表明我们的方法在ResNet和轻量级MobileNet上稳定地优于几种最新的注意力机制。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 1158

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

寒武纪第一届ACM金牌训练营网络测试赛 C题 math

传送门:Math 题目大意: 对于一个数对 (a,b),如果满足 a%b=a/b,则称这个数对为“好的数对”。  如果 a 输入样例: 5 8 3 65 498 513 115 10 80 100 输出样例: 3 7 1 131 1556 1611 268 10 172 227 思路: 这个题算是个找规

zuzhiang的博客 1534

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

2018.1.14 寒武纪测试赛

这次比赛的题好难啊,,,我们一共做了两个题,C和D, C算是简单的了,就是按照题意推的两个公式,按判断公式x^2+x>n,找到最小的x,1—x的for循环代公式求解即可 D题A的有点莫名其妙,我是将所有的字符串全部变长50倍,排序后比较相邻两个相同的长度,输出最大长度,比赛的时候就是抱着试试的态度,因为500倍超内存了,就试了50,后来看了题解,应该是长度变到1000就稳过了 还做了E,但是

AAAAAAAC的博客 636

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

寒武纪FPFA岗笔试题(一)解析

寒武纪FPFA岗笔试题(一)解析 选择题 2. 3. 4. 问答题 请编写verilog代码来表示同步复位和异步复位的一位DFF。 module DFF1( output reg q, input d, input clk,rst ); always @(posedge clk) //synchronization begin if(!rst) q<=

weixin_42535005的博客 562

睿智合创(北京)科技有限公司数据分析笔试——部分笔试题(附答案)

1.删除重复数据 import pandas as pd frame=pd.DataFrame({ "C1":['one','two']*2+['two'], "C2":[1,1,2,3,3] }) dele_dup=frame.drop_duplicates() frame..drop_duplicates(inpalce=True) 注:主要考察DataFrame的drop_d...

qq_28935065的博客 7852

寒武纪 4.5笔试题

第一题通过50%, 第二题不会,第三题通过,第四题通过50%。 回头搜一下为什么Q1Q4,搞清楚为什么没有accept? # Q1 class Solution: def area(self, grid): m, n = len(grid), len(grid[0]) def dfs(i, j): if 0 <= i < m and 0 <= j < n and grid[i][j] == ".":

DecafTea的博客 482

寒武纪测试赛1-C题

代码: #include<iostream> #include<math.h> using namespace std; int a[100001] = { 0 }; int main() { int N; while (cin >> N) { int sum = N - 2; ...

weixin_30586085的博客 263

寒武纪SOC笔试2019

转: https://blog.youkuaiyun.com/bleauchat/article/details/91487435         module Syn_DFF(clk, rst_n,Din,Dout);input clk,rst_n,Din;output Dout;reg...

gemengxia的博客 824
上一篇: 湘潭大学2017年下学期程序设计实践-模拟测试3 题解
下一篇: C with STL入门详解(适合初学者)
mMingfunnyTree
博客等级 码龄9年 204粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值