解题思路:
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 人评分