解题思路:
M个人,N个一元,K个两元。
将这M个人以0到M-1的编号存入到vector中,
对这两个组成部分进行判断,
若N小于K,n直接输出0;
若N大于K,对这个序列通过next_permutation进行排列,
在排列中遍历vector,若元素<N,s++;
若元素>=N,s--
对其进行判断,若s小于0,直接break,进行下一次
若s>=0;n++;
最后输出n;
注意事项:
参考代码:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int M,N,K,i,s,n;
vector<int>v;
cin>>M>>N>>K;
for(i=0;i<M;i++)
v.push_back (i);
n=0;
if(N<K)
n=0;
else
{
vector<int>::iterator it=v.begin ();
do
{
s=0;
for(i=0;i<M;i++)
{
if(v[i]<N)
s++;
else
s--;
if(s<0)
break;
}
if(s>=0)
n++;
}while(next_permutation(it,it+v.size ()));
}
cout<<n<<endl;
return 0;
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复