网易编程(数列还原)
来源:互联网 发布:淘宝用户积分查询 编辑:程序博客网 时间:2024/05/24 06:08
牛牛的作业薄上有一个长度为 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 个)。
输出描述:
输出一行表示合法的排列数目。
本文用到一个计算序列全排列的函数:next_permutation函数,需要强调的是,next_permutation()在使用前需要对欲排列数组按升序排序,否则只能找出该序列之后的全排列数。编程的时候,灵活应用库函数可以,可以节省很多时间。
#include<iostream>#include<string>#include<vector>#include<set>#include <algorithm>using namespace std;int main(){int N, K;int pairnum = 0;int num = 0;cin >> N >> K;int a[100];vector <int> s;vector<int> fuzpos;vector<int> fuznum;for (int i = 0; i < N; ++i){cin >> a[i];s.push_back(a[i]);if (a[i] == 0)fuzpos.push_back(i); // missing num position}for (int i = 1; i <=N; ++i)if (find(s.begin(), s.end(), i) == s.end())fuznum.push_back(i); // missing numvector<int> ::iterator iter = fuznum.begin();do{for (int k = 0; k < fuznum.size(); ++k)a[fuzpos[k]] = fuznum[k];for (int i = 0; i < N-1; ++i){for (int j = i+1; j < N; ++j){ //get order pairif (a[i] < a[j]) pairnum++;}}if (pairnum == K)num++;pairnum = 0;} while (next_permutation(iter, iter + fuznum.size()));cout << num << endl;}
阅读全文
0 0
- 网易编程(数列还原)
- 网易编程题:数列还原
- 数列还原-网易python
- 网易2017内推笔试编(数列还原)
- [编程题] 数列还原
- 网易笔试编程-Fibonacci数列
- 网易2017内推笔试1:数列还原 [python]
- 2018网易笔试编程题----重排数列
- 2018网易笔试编程题----重排数列
- 数列还原
- Fibonacci数列----网易2017内推笔试编程题合集(二)
- 2018网易校招编程题(8)小易喜欢的数列
- 网易笔试编程题——Fibonacci数列
- 网易2018校园招聘编程真题之重排数列
- 网易2018校招内推编程题 小易喜欢的数列
- 网易 Fibonacci数列
- 网易Fibonacci数列
- 网易笔试:Fibonacci数列
- 剑指offer:链表中倒数第k个结点
- linux系统备份以及自定义liveCD的制作
- 【方法】STM32F407单片机SDIO接口上插入多张SD卡并进行通信
- CSS 高级语法有哪些?
- MySQL操作详解
- 网易编程(数列还原)
- 387. First Unique Character in a String
- Java面试题全集(上)
- 向量空间模型(VSM)在文档相似度计算上的简单介绍
- IOS模拟器运行报错:resource fork, Finder information, or similar detritus not allowed
- VB.NET
- 磁盘管理2--磁盘加密
- 一点C++学习资源
- 转载:http://blog.csdn.net/u010128736/ ORB-SLAM2详解(四)跟踪