关注
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//输入参数
int n;//输入n个数
int k;//有序对k对
vector<int> a;//输入序列a,包含1~n的n个数,有若干个数(不超过10个)是0
//输出参数
int cnt=0;//合法排列的数目
//输出perm数组,用于测试
void printperm(const vector<vector<int> > &perm)
{
for(int i=0;i<perm.size();i++)
{
for(int j=0;j<perm[0].size();j++)
cout<<perm[i][j]<<" ";
cout<<endl;
}
}
//将1~n全排列,放入二维数组perm
void creatperm(vector<vector<int> > &perm)
{
vector<int> temp;//1~n的临时vector
for(int i=1;i<=n;i++)
temp.push_back(i);
do{
perm.push_back(temp);
}while(next_permutation(temp.begin(), temp.end()));
}
//过滤,刷掉返回false,如果没有刷掉返回true
bool chooseperm(const vector<int> &permtemp)
{
for(int i=0;i<n;i++)
{
if(a[i])
{
if(a[i]!=permtemp[i])
return false;
}
}
return true;
}
//计算cnt
void count( const vector<vector<int> > &choose)
{
for(int i=0;i<choose.size();i++)
{
int ktemp=0;
vector<int> temp=choose[i];
for(int j=0;j<temp.size();j++)
{
for(int jj=j+1;jj<temp.size();jj++)
{
if(temp[j]<temp[jj])
ktemp++;
}
}
if(ktemp==k)
cnt++;
}
}
int main(){
//输入
cin>>n>>k;
for(int i=0;i<n;i++)
{
int temp;
cin>>temp;
a.push_back(temp);
}
//第一步
//先将1~n全排列(permutation),生成一个二维数组备用(每一行代表一种排序方式);
vector<vector<int> > perm;//用于存放全排列的二维vector
creatperm(perm);
cout<<"全排列:"<<endl;
printperm(perm);//测试生成是否正确
//第二步
//过滤该二维数组,选取满足特定位置上为输入序列中非0数的序列,生成新的二维数组;
vector<vector<int> > choose;//过滤之后的二维数组
for(int i=0;i<perm.size();i++)
{
if(chooseperm(perm[i]))
choose.push_back(perm[i]);
}
cout<<"过滤后:"<<endl;
printperm(choose);//测试生成是否正确
//第三步
//逐行验证其有序对是否为k,统计符合的个数;
count(choose);
cout<<"符合的排列个数"<<endl;
cout<<cnt<<endl;
}
查看原帖
点赞 1
相关推荐
07-04 18:19
中国人民大学 管理培训生 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你觉得实习能学到东西吗 #
33522次浏览 672人参与
# 百度工作体验 #
221524次浏览 1967人参与
# 现代汽车前瞻技术研发急速编程挑战赛 #
27006次浏览 213人参与
# 秋招什么时候开投比较合适? #
21353次浏览 298人参与
# 发工资后,你做的第一件事是什么 #
67905次浏览 229人参与
# 实习,不懂就问 #
44328次浏览 665人参与
# 如何准备秋招 #
19281次浏览 367人参与
# 机械人与华为的爱恨情仇 #
116646次浏览 945人参与
# 机械人集合!你是什么工程师? #
15598次浏览 89人参与
# 找不到好工作选择GAP真的丢人吗 #
77970次浏览 938人参与
# 工作中哪个瞬间让你想离职 #
25683次浏览 177人参与
# 快手求职进展汇总 #
546766次浏览 6001人参与
# 硬件应届生薪资是否普遍偏低? #
73836次浏览 514人参与
# 不考虑转正,实习多久合适 #
31926次浏览 145人参与
# 你们公司几号发工资 #
20842次浏览 140人参与
# 多益网络求职进展汇总 #
29015次浏览 134人参与
# 软开人,秋招你打算投哪些公司呢 #
102733次浏览 958人参与
# 每个月的工资都是怎么分配的? #
26923次浏览 422人参与
# 你觉得现在还能进互联网吗? #
8114次浏览 132人参与
# 面试中,你被问过哪些奇葩问题? #
68327次浏览 796人参与
# 元戎启行求职进展汇总 #
32531次浏览 240人参与