首页 > 其他分享 >STL函数之全排列next_permutation

STL函数之全排列next_permutation

时间:2022-10-26 17:37:04浏览次数:33  
标签:Index STL 之全 ++ next int vector Result Input


题目描述

牛牛的作业薄上有一个长度为 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 个)。


输出描述:


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


示例1

输入


5 5 4 0 0 2 0


输出


2


#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool Judge(vector<int> Input,int k){
int Result = 0;
for(int i = 0;i < Input.size();i ++){
for(int j = i + 1;j < Input.size();j ++){
if(Input[i] < Input[j]){
Result++;
}
}
}
return (Result == k);
}
int main(){
int n,k;vector<int> Input;
int Result = 0;
cin >> n >> k;
vector<int> NewInput(n);
vector<int> NoExistArray;
for(int i = 0;i < n;i ++){
int tmp;
scanf("%d",&tmp);
Input.push_back(tmp);
}
for(int i = 1;i <= n;i ++){
if(find(Input.begin(),Input.end(),i) == Input.end()){
NoExistArray.push_back(i);
}
}
int NoExistNum = NoExistArray.size();
vector<int> Index(NoExistNum);
for(int i = 0;i < NoExistNum;i ++){
Index[i] = i;
}
do{
int index = 0;
for(int i = 0;i < Input.size();i ++){
if(Input[i] > 0){
NewInput[i] = Input[i];
}
else if(Input[i] == 0){
NewInput[i] = NoExistArray[Index[index++]];
}
}
if(Judge(NewInput,k)){
Result ++;
}
}while(next_permutation(Index.begin(),Index.end()));
printf("%d\n",Result);
return 0;
}

 

标签:Index,STL,之全,++,next,int,vector,Result,Input
From: https://blog.51cto.com/u_13121994/5798105

相关文章

  • Javaweb基础复习------EL表达式+JSTL-if&foreach
    EL表达式------简化JSP页面的Java代码主要功能是------获取数据(语法:${data})举例://ServletDemo1.javapackagecom.example.servlet;importcom.example.pojo.User;i......
  • 使用 JSTL 报错:javax/servlet/jsp/tagext/TagLibraryValidator
    jsp使用jstl,访问页面之后报错,如上图所示。我的Tomcat版本是10.0,导入的jstl是javax.servlet下的,应该导入以下几个包:<dependency><groupId>mysql</groupId>......
  • C++ STL库_vector
    1.vector的初始化方式vectora(10);定义10个整形元素的向量(每个元素的初值为0)vectora(10,1);定义10个整形元素的向量(每个元素的初值为1)vectora(b);用b向量创建a向量,整体......
  • JavaScriptDOM节点操作:parentNode、children、nextElementSibling、previousElementS
    元素.parentNode:获取元素的最近一级父级节点父元素.children:获取所有子元素元素.nextElementSibling:获取元素的下一个同级元素元素.previousElementSibling:获取元素的上......
  • vue源码中的nextTick是怎样实现的
    一、Vue.nextTick内部逻辑在执行initGlobalAPI(Vue)初始化Vue全局API中,这么定义Vue.nextTick。functioninitGlobalAPI(Vue){//...Vue.nextTick=ne......
  • next_permutation / prev_permutation 用法
    给定输入的序列a(整数即可,其他无限制条件),next_permutation(a+1,a+n+1)可以求出a的关于值的下一个排列,prev_permutation(a+1,a+n+1)可以求出a的关于值......
  • efcore 连接SqlServer2008R2报错:'OFFSET' 附近有语法错误。 在 FETCH 语句中选项 NEXT
    用的是EFCore6,连接SqlServer2008R2时,生成的分页方法会报错,只需要指定ProviderName时加上版本号就行:Microsoft.EntityFrameworkCore.SqlServer@2008,高于2008版本就按默......
  • Vue.nextTick核心原理
    相信大家在写vue项目的时候,一定会发现一个神奇的api,Vue.nextTick。为什么说它神奇呢,那是因为在你做某些操作不生效时,将操作写在Vue.nextTick内,就神奇的生效了。那这是什么......
  • Lang.NEXT 2012相关Session
    2012年4.2-4日的Lang.NEXT2012是.NET(CLR,DLR以及其他平台)上语言及相关工具的设计开发者的盛会。会议的相关Session已经放出,绝对值得好好的学习,地址......
  • Vue 中 nextTick 的实现原理是什么
    vue中有一个较为特殊的API,nextTick。根据官方文档的解释,它可以在DOM更新完毕之后执行一个回调,用法如下://修改数据 vm.msg = 'Hello' //DOM还没有更新 Vue.......