阿里笔试题解(2020.4.17场)

阿里笔试题解(2020.4.17场)题目一题干给定n,构造长度为n的排列,使得满足i<j<ki<j<ki<j<k的ai,aj,aka_i,a_j,a_kai​,aj​,ak​,不出现ak+ai=aj∗2a_k+a_i=a_j*2ak​+ai​=aj​∗2的情况。题解暴力解法得到n=3n=3n=3到n=8n=8n=8部分的答案,观察可知,奇数部分和偶数部之间不会互相干扰(因为当aia_iai…

大家好,又见面了,我是你们的朋友全栈君。

题目一

题干

给定n,构造长度为n的排列,使得满足 i < j < k i<j<k i<j<k a i , a j , a k a_i,a_j,a_k ai,aj,ak,不出现 a k + a i = a j ∗ 2 a_k+a_i=a_j*2 ak+ai=aj2的情况。

题解

暴力解法得到 n = 3 n=3 n=3 n = 8 n=8 n=8部分的答案,观察可知,奇数部分和偶数部之间不会互相干扰(因为当 a i a_i ai a k a_k ak分别为奇数和偶数时,奇数加偶数等于奇数,一定不会有满足 a i + a k = a j ∗ 2 a_i+a_k=a_j*2 ai+ak=aj2 a j a_j aj),故分奇偶用分治法递归构造。

重新写了一下题解:
先暴力做一下,0分,不过用暴力的程序找到了一些性质:若“1 5 3 2 6 4”该排列满足题目中要求的性质,则序列”1 9 5 3 11 7″(第1 5 3 2 6 4个奇数)和序列”2 10 6 4 12 8″(第1 5 3 2 6 4个偶数)均满足题目要求中的性质
稍加思索可以发现,排列中的奇数部分和偶数部分不会互相影响(因为当ai和ak的奇偶性不相同时,ai+ak一定是奇数,一定没有满足条件的aj)。所以构造时可以奇数部分和偶数部分分开构造,然后再拼接在一起。比如上面提到的例子中的序列”1 9 5 3 11 7″和”2 10 6 4 12 8″拼在一起形成的新排列”1 9 5 3 11 7 2 10 6 4 12 8″就是n=12时的答案。
一步一步往下拆分,就是分治的思路。
不懂的地方可以看看代码,再不懂的话可以把代码拷到本地然后把生成的过程输出一下。

满分代码

不放文档格式的了,仅供大家参考,如需文档可以私信/评论。

#include <cstdio>
using namespace std;

const int maxn=int(1e6)+11;
int n;
int a[maxn];

void solve(int l,int r,int mark) {
    if(l==r) {
        if(mark) a[l]=1;
        else a[l]=2;
        return;
    }
    int mid=(l+r)>>1;
    solve(l,mid,1), solve(mid+1,r,0);
    for(int i=l;i<=r;++i)
        a[i]=a[i]*2-mark;
    return;
}

int main() {
    scanf("%d",&n);
    solve(1,n,0);

    int i;
    for(i=1;i<=n;++i) printf("%d ",a[i]/2);
    putchar('\n');
    
    return 0;
}

在这里插入图片描述


题目二

题干

给一个带权环路,随机删一条边,使从a到b的最短路径长度变化的可能性有多大(分数表示)。

题解

放代码看看就行了,应该不需要题解吧。需要讲解一下的评论吧。

满分代码

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142546.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • eureka 原理_什么是swot分析方法

    eureka 原理_什么是swot分析方法#总结eureka内部实际上是分为三个实例的,分别是Client,Server和Instance,Eureka-Client启动,创建Instance实例,封装成对象,推送给server,server接收Instance对象,返回实例集合,并签订租约,client定时发动续租请求到server,server维护各个instance实例,服务之间调用不通过eureka。#Eureka-Clie…

    2022年8月30日
    3
  • subprocess的用法[通俗易懂]

    subprocess的用法[通俗易懂]从python2.4版本开始,可以用subprocess这个模块来产生子进程,并连接到子进程的标准输入/输出/错误中去,还可以得到子进程的返回值。subprocess意在替代其他几个老的模块或者函数,比如:os.systemos.spawn*os.popen*popen2.*commands.*一、subprocess.Popensubprocess模块定义了一个类:Popenc…

    2025年8月12日
    3
  • 黑群晖vmm专业版_教你群晖用自带的VMM虚拟机安装精简版win10系统教程

    黑群晖vmm专业版_教你群晖用自带的VMM虚拟机安装精简版win10系统教程教你群晖用自带的VMM虚拟机安装精简版win10系统教程;V;q”X,~+K6O’ra,a+b新手请严酷依照我的操纵履行,几近每个步调都截图了,100%纯小白教程!2^%P4U:{$IE”?,V7S9p&d0D&s&?安装VMM虚拟机:!N3K&U&h$\+W1、进入群晖系统后,在套件中心,找到…

    2022年9月2日
    4
  • webstorm激活 3月最新注册码

    webstorm激活 3月最新注册码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    39
  • 求生之路2ping高_DDS信号源

    求生之路2ping高_DDS信号源问答时间:2020年12月17日嘉宾简介:高少星:萌宝集团创始人、稻荷资本创始合伙人、《好玩的书》作者。曾任顺为资本董事总经理、百度高级投资经理,是好大夫、丁香园、一点资讯、宝宝巴士、I…

    2025年7月17日
    6
  • ldap服务器是什么

    ldap服务器是什么LDAP服务器简单来说它是一种得到某些数据的快捷方式,同时LDAP服务器也是一个协议,它经常被用作集体的地址本使用,甚至可以做到更加庞大。它是一种特殊的数据库,与一般的数据库相比有很大的差距,LDAP服务器的读性与一般服务器相比更加优秀。同时LDAP服务器在查询上总了很多的优化,所以利用它可以快速查询出想要得到的结果,当然它也有缺陷,比如在更新方面,它会更新的很慢。LDAP服务器的目录有哪些优势…

    2022年5月14日
    62

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号