有100种不同类型的大写字母,每个小写字母的ID范围从1到100。此外,有“ n”个人分别具有不同数量的大写字母的集合。有一天,所有这些人都决定参加一个戴着帽子的聚会,但看起来很独特,他们决定他们都不会戴着相同类型的帽子。因此,计算一下安排或方式的总数,以使它们都不佩戴相同类型的帽子。
约束: 1 <= n <= 10 示例:
第一行包含n的值,接下来的n行包含集合 在所有n个人中 输入: 3
5 100 1 //第一人称集合。
2 //第二人称集合。
5 100 //第三人称集合。
输出: 4
说明:所有有效的方法是(5, 2, 100)
,(100, 2, 5),
(1, 2, 5)
和(1, 2, 100)
我得到的输出-
(5,2,100)
我的代码是-
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <cstring>
using namespace std;
vector<int>c[10];
void comb(int index,int n,int d[],int v[])
{
if(index==n)
{for(int i=0;i<n;i++)
cout<<d[i]<<" ";
memset(v,0,sizeof(v));
cout<<endl;
return;
}
for(int k=0;k<c[index].size();k++)
{ if(v[c[index][k]]==0)
{ v[c[index][k]]=1;
d[index]=c[index][k];
comb(index+1,n,d,v);}
}
}
void enter(int n){
int x;
string str,temp;
getline(cin,str);
for(int i=0;i<n;i++)
{ getline(cin,str);
stringstream ss(str);
while(ss>>temp){
stringstream s;
s<<temp;
s>>x;
c[i].push_back(x);
}
}
int v[101]{};
int d[n];
comb(0,n,d,v);}
int main()
{ int n;
cin>>n;
enter(n);
return 0;
}