【编程测试题】数列还原

编程题:数列还原 题目描述牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数,但是因为一些原因,其中有一些位置(不超过 10 个)看不清了,但是牛牛记得这个数列顺序对的数量是 k,顺序对是指满足 i < j 且 A[i] < A[j] 的对数,请帮助牛牛计算出,符合这个要求的合法排列的数目。输入描述:每个输入包含一个测试用例。每个测试用例的第一行包含两个整数 n 和 k(1 &l... 阅读详情

数列还原

题目描述

牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数,但是因为一些原因,其中有一些位置(不超过 10 个)看不清了,但是牛牛记得这个数列顺序对的数量是 k,顺序对是指满足 i < j 且 A[i] < A[j] 的对数,请帮助牛牛计算出,符合这个要求的合法排列的数目。

输入描述:

每个输入包含一个测试用例。每个测试用例的第一行包含两个整数 n 和 k(1 <= n <= 100, 0 <= k <= 1000000000),接下来的 1 行,包含 n 个数字表示排列 A,其中等于0的项表示看不清的位置(不超过 10 个)。

输出描述:

输出一行表示合法的排列数目。

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
#include <math.h>
#include <algorithm>
using namespace std;
typedef long long ll;
//http://www.nowcoder.com/questionTerminal/b698e67a2f5b450a824527e82ed7495d
 
int a[105];
bool appear[105];
int missidx[15];
int missnum[15];
int misscnt=0;
int smaller[105][105];
int larger[105][105];
 
int calc_orderedPairs(int *num,int n){
    int ans=0;
    for(int i=1;i<n;i++){
        if(num[i])
            for(int j=0;j<i;j++){
                if(num[j]&&num[j]<num[i]){
                    ++ans;
                }
            }
    }
    return ans;
}
 
int main(){
    int n,k;
    scanf("%d%d",&n,&k);
    if(k>n*(n-1)/2){
        puts("0");
        return 0;
    }
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
        if(!a[i])missidx[misscnt++]=i;
        else appear[a[i]]=1;
    }
    misscnt=0;
    for(int i=1;i<=n;i++){
        if(!appear[i]){
            missnum[misscnt++]=i;
        }
    }
     
    //given inner
    int given=calc_orderedPairs(a,n);
    if(given>k){
        puts("0");
        return 0;
    }
     
    //given and not given
    for(int i=0;i<misscnt;++i){
        int small=0,large=0;
        for(int j=0;j<n;j++){
            if(!a[j]){
                smaller[j][missnum[i]]=small;
            }
            else if(a[j]<missnum[i])++small;
        }
        for(int j=n-1;j>=0;--j){
            if(!a[j]){
                larger[j][missnum[i]]=large;
            }
            else if(a[j]>missnum[i])++large;
        }
    }
     
    int ans=0;
    //not given
    do{
        int inner=calc_orderedPairs(missnum,misscnt);
        for(int i=0;i<misscnt;++i){
            inner+=smaller[missidx[i]][missnum[i]];
            inner+=larger[missidx[i]][missnum[i]];
        }
        if(inner+given==k) ++ans;
    }while(next_permutation(missnum,missnum+misscnt));
     
    printf("%d\n",ans);
    return 0;
}

牛人真多。。。

先统计哪些数没出现,哪些位置缺少数值。

然后考虑计算。

10!=3628800

如果是每种排列还暴力计算(~100*100),这不行,太慢了

考虑预先计算一部分。

总顺序对数=已经填进去的数之间的顺序对数+没有填进去的数之间的顺序对数+已经填进去和没有填进去的数之间的顺序对数

第一部分:预先算一遍就好了

第二部分:只有10*10,暴力计算

第三部分:预先处理,每个数填在空位上,和其他预先填进去的数组成的顺序对数

三部分相加,判断等不等于k就行。

计算量?

10*10+10,也就110

所以你看,<1ms过了

(呃,其实数据太弱有关系吧)



 

完美世界游戏测试岗秋招笔试全解析:从测试思维到情景题备战 软件测试是保障产品质量的关键环节,而游戏测试作为其细分领域,更强调对复杂交互、数值系统与异常场景的敏感度。想要进入游戏行业,理解测试思维是第一步——面对功能时能主动构建“哪里会出问题”的地图,并掌握等价类划分、边界值分析等基础方法。测试用例设计能力是笔试的核心得分区,Bug生命周期与缺陷管理流程则体现了工程师的协作素养。兼容性测试、性能测试等专项知识,则帮助候选人在多机型、高负载场景下定位风险。这些原理不仅服务于日常测试工作,也是秋招笔试中逻辑推理与情景分析题的考察重点。从概念到实践,本文结合完美世界游戏测 阅读详情

相关推荐

网易面试题之 牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数,但是因为一些原因, * 其中有一些位置(不超过 10 个)看不清了,但是牛牛记得这个数列顺序对的数量是 k,

牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数,但是因为一些原因, * 其中有一些位置(不超过 10 个)看不清了,但是牛牛记得这个数列顺序对的数量是 k, * 顺序对是指满足 i < j 且 A[i] < A[j] 的对数,请帮助牛牛计算出,符合这个要求的合法排列的数目。 */

李凯龙 7066

[编程题] 数列还原

牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数,但是因为一些原因,其中有一些位置(不超过 10 个)看不清了,但是牛牛记得这个数列顺序对的数量是 k,顺序对是指满足 i < j 且 A[i] < A[j] 的对数,请帮助牛牛计算出,符合这个要求的合法排列的数目。 输入描述: 每个输入包含一个测试用例。每个测试用例的第一行包含两个整数 n 和 k(1 <= n <=

a342500329a的专栏 914

海康威视iVMS-4200在银河麒麟系统部署全攻略与疑难排解

在信创国产化进程中,软件兼容性是关键挑战之一。以安防监控领域广泛使用的海康威视iVMS-4200客户端为例,其从Windows环境迁移到银河麒麟等国产操作系统时,面临架构适配、依赖库匹配等核心兼容性问题。这涉及到跨平台软件部署的通用原理:不同CPU架构(如ARM的飞腾、x86的兆芯)和操作系统底层API的差异,要求软件必须进行针对性编译和优化。解决这类问题的技术价值在于保障专业软件在国产化环境中的稳定运行,是信创产业落地的重要环节。具体到应用场景,如在基于银河麒麟V10的安防监控项目中,通过获取对应架构的.

weixin_33423874的博客 1413

全排列+顺序对问题

题目描述 牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数,但是因为一些原因,其中有一些位置(不超过 10 个)看不清了,但是牛牛记得这个数列顺序对的数量是 k,顺序对是指满足 i &lt; j 且 A[i] &lt; A[j] 的对数,请帮助牛牛计算出,符合这个要求的合法排列的数目。 输入描述: 每个输入包含一个测试用例。每个测试用例的第一行包含两个整数 n 和...

TI09257的博客 2233

PLC控制气缸与电磁阀:从原理到实战编程详解

在工业自动化领域,很多工程师都能编写PLC程序控制电机启停,但当涉及到气缸和电磁阀的精确控制时,却常常遇到动作不协调、响应延迟甚至设备损坏的问题。这背后的关键不在于PLC编程本身,而在于对气动元件特性和控制逻辑的深入理解。 本文将从实际工程问题出发,深入解析气缸与电磁阀的工作原理、PLC控制逻辑设计、常见故障排查方法,并通过完整的梯形图实例,帮助读者掌握气动系统自动化编程的核心要点。无论你是刚接触PLC的初学者,还是希望提升气动控制技能的工程师,都能从中获得实用的技术指导。 1. 气缸与电磁阀在自动化控制中

weixin_42522374的博客 337

告别jom Error 2:深入理解QtCreator、CMake与MSVC工具链的协作机制

本文深入解析QtCreator构建过程中常见的jom Error 2问题,揭示CMake与MSVC工具链的协作机制。从CMake生成器的工作原理到MSVC工具链的组件协作,帮助开发者系统化诊断构建错误,提升开发效率。

weixin_30654419的博客 429

面试题:数列还原(网易笔试17)

牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数,但是因为一些原因,其中有一些位置(不超过 10 个)看不清了,但是牛牛记得这个数列顺序对的数量是 k,顺序对是指满足 i &lt; j 且 A[i] &lt; A[j] 的对数,请帮助牛牛计算出,符合这个要求的合法排列的数目。 输入描述: 每个输入包含一个测试用例。每个测试用例的第一行包含两个整数 n 和 k(1 &lt...

qq_28863045的博客 713

同济大学C++mooc第五、六讲参考答案

同济大学C++moooc第5、6讲 第五讲 第一题 随机产生10个30~100(包括30,100)的正整数,求它们的最大值、最小值、平均值,并显示整个数组的值和结果。 代码片. // #include<iostream> const int n = 10; using namespace std; int main() { int s[n],i,j,t,sum=0; for (i = 0; i < n; i++)

cjzui6666的博客 1万+

NortH开发团队提高知识测试题(NO.2)

在考试过程中,请遵守:①请勿以除自己思考外的任何形式获取答案,违反者将取消考试资格。②可以在不违反第一条的情况下,使用计算器等电子设备。③仅在程序写作题中可以使用编译器或如Visual Studio Code等的写作软件。本试题满分300分,选择题共90分,简答题共50分,程序写作题共160分。请认真作答!

season100201_1的博客 912

别再傻傻用外部中断了!STM32H743定时器编码器模式4倍频测速保姆级配置(附CubeMX+HAL库代码)

本文详细介绍了STM32H743定时器编码器模式的4倍频测速配置方法,通过CubeMX和HAL库实现高效脉冲计数。相比传统外部中断方案,硬件编码器模式显著降低CPU占用率,提升测速精度,适用于电机控制和运动检测等高要求场景。

weixin_33711647的博客 403

英飞凌AURIX™ TC3xx系列MCU的ISO 26262安全机制实战:从安全手册到代码集成的避坑指南

本文深入探讨英飞凌AURIX™ TC3xx系列MCU的ISO 26262安全机制实战应用,重点解析锁步核配置、ECC策略优化及SafeTlib库集成中的关键问题。通过代码示例和配置建议,帮助开发者实现ASIL D级别安全性,规避常见陷阱,提升汽车电子系统的功能安全合规性。

weixin_42558093的博客 403

Llama3与Qwen3-4B数学能力对比:推理任务实战评测

本文介绍了如何在星图GPU平台上自动化部署Qwen3-4B-Instruct-2507镜像,该模型在数学推理任务中表现出色,可广泛应用于教育辅助、智能客服等需要逻辑分析与问题解答的场景,助力高效构建AI驱动的决策支持系统。

weixin_30674431的博客 489

Electron - Electron failed to install correctly, please delete node_modules/electron and try install

Electron安装失败:Electron failed to install correctly, please delete node_modules/electron and try installing again,electron安装报错:Electron failed to install correctly...解决方案,Electron 未能正确安装,请删除 node_modules/electron,然后再次尝试安装,如何解决这个问题,手把手教你解决,在yarn dev时报错,electr

🏆 前端领域优质创作者 4366

美团测试岗秋招笔试全拆解:编程基础、测试思维与答题策略

软件测试是保障产品质量的关键环节,测试开发工程师不仅需要扎实的编程功底,还要具备系统的测试思维。在技术笔试中,计算机基础如数据结构、网络协议常作为核心考点,而测试用例设计与逻辑推理则考察候选人对业务场景的理解。美团秋招测试岗笔试正是这一能力模型的典型体现,它综合考核编程能力、基础知识与测试思维。本文深入拆解美团测试岗笔试题型分布、复习优先级与答题节奏,结合真实场景分享如何高效准备,帮助求职者在有限时间内稳定输出基本功,顺利通过笔试进入面试。

weixin_28826521的博客 287

R语言caret拟合模型:train函数构建xgBoost Dart模型、模型调优、自定义设置trainControl函数和tuneLength参数

R语言caret拟合模型:train函数构建xgBoost Dart模型、模型调优、自定义设置trainControl函数和tuneLength参数

statistics+insight+vista+power 528

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

基于排列的数列顺序对

题目描述: 洋洋的作业本上有一个长度为n的排列A,这个排列包含了从1到n的n个数,但是因为一些原因,其中一些位置(不超过10个)看不清了,但是洋洋记得这个数列顺序对的数量为k,顺序对是指满足i 输入描述: 每个输入包含一个测试用例。每个测试用例的第一行包含两个整数n和k(1 输出描述: 输出一行表示合法的排列数目。 输入例子: 5 5 4 0 0 2 0

lsxpu的专栏 1748

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Java——n个数的全排列

例题: 输入一串字符串,将该字符串中的字符元素进行全排列,然后,一串输出结果。 例如: 输入: ABCD 输出: ABCD ABDC ACBD ACDB ADBC ADCB BACD BADC BCAD BCDA BDAC BDCA CABD CADB CBAD CBDA CDAB CDBA DABC DACB DBCA DBAC DCAB ...

beyond谚语的博客 6496

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

网易2017内推笔试1:数列还原 [python]

''' [编程题] 数列还原 时间限制:1秒 空间限制:32768K 牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数, 但是因为一些原因,其中有一些位置(不超过 10 个)看不清了, 但是牛牛记得这个数列顺序对的数量是 k,顺序对是指满足 i 请帮助牛牛计算出,符合这个要求的合法排列的数目。  输入描述: 每个输入包含一个测试用例。每个测试用例的第一

ChrisMinions小站 760

第八题:牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数,但是因为一些原因,其中有一些位置(不超过 10 个)看不清了,但是牛牛记得这个数列顺序对的数量是 k,顺序对是指满足...

第八题:牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数,但是因为一些原因,其中有一些位置(不超过 10 个)看不清了,但是牛牛记得这个数列顺序对的数量是 k,顺序对是指满足 i < j 且 A[i] < A[j] 的对数,请帮助牛牛计算出,符合这个要求的合法排列的数目。 输入例子: 5 5 4 0 0 2 0 输出例子: 2a...

diaorou9470的博客 1131

写一下莱布尼茨级数

背景:看《逻辑的引擎》这本书的时候,看到天才莱布尼茨的发现,本来是对电脑计算速度好奇的,试了下运算时间蛮长,就是了100,效果跟书本不一样。记录一下。 莱布尼茨级数:π/4 = 1-1/3+1/5-1/7+1/9… 越趋近极限,就越接近π/4的值。 package com.hmc.testUserAccounts; /** Author:meice Huang Time:2018年10月日下午1...

起舞的日子 1万+

hdu 4996 1~n排列LIS值为k个数

http://acm.hdu.edu.cn/showproblem.php?pid=4996 直接贴bc题解 按数字1-N的顺序依次枚举添加的数字,用2N的状态保存在那个min数组中的数字,每次新添加数字可以根据位置计算出新的min数组。 怎么快速计算呢?这里如果枚举N的位置是不可行的,这样2n的state记录的信息不够。很巧妙的思路是枚举放在当前位置的数字,比如说1-N-1的排列...

weixin_30322405的博客 185

排列问题 permutation(似乎原题是SRM 592 Little Elephant And Permutation Div1?)

排列问题 permutation题目描述长度为N的排列是一个序列(a1,a2,...,an)(a_1, a_2,..., a_n),恰好包含从1到N的每一个数字。例如,(3,1,4,5,2)(3,1,4,5,2)是一个长度为5的排列。对于两个排列a和b,定义magic(a,b)=max(a1,b1)+max(a2,b2)+...+max(an,bn)magic(a,b) = max(a_1,b_1)

dogeding233 495

牛客网 之 数列还原(数列的全排列算法)

题目描述 牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数,但是因为一些原因,其中有一些位置(不超过 10 个)看不清了,但是牛牛记得这个数列顺序对的数量是 k,顺序对是指满足 i &amp;lt; j 且 A[i] &amp;lt; A[j] 的对数,请帮助牛牛计算出,符合这个要求的合法排列的数目。 输入描述: 每个输入包含一个测试用例。每个测试用例的第一行包含两个整数 n ...

try to do 1164
上一篇: 【C++笔记】回调函数
下一篇: 【编程测试题】数字游戏
HelloZEX
博客等级 码龄11年 486粉丝 264原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值