看到数据范围我就想到了一种有一种暴力的美的做法
k既然<=4那么直接分类讨论
#include
using namespace std;
int n,k,ans;
mapm;
string str[15];
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>str[i];
}
if(k==1){
for(int i=1;i<=n;i++){
if(!m[str[i]]){
m[str[i]]=1;
ans++;
}
}
cout<<ans;
return 0;
}
if(k==2){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j){
continue;
}
string gc;
gc=str[i]+str[j];
if(!m[gc]){
m[gc]=1;
ans++;
}
}
}
cout<<ans;
return 0;
}
if(k==3){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++){
if(i==j){
continue;
}
if(j==k){
continue;
}
if(k==i){
continue;
}
string gc;
gc=str[i]+str[j]+str[k];
if(!m[gc]){
m[gc]=1;
ans++;
}
}
}
}
cout<<ans;
return 0;
}
if(k==4){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++){
for(int l=1;l<=n;l++){
if(i==j){
continue;
}
if(i==k){
continue;
}
if(i==l){
continue;
}
if(j==k){
continue;
}
if(j==l){
continue;
}
if(k==l){
continue;
}
string gc;
gc=str[i]+str[j]+str[k]+str[l];
if(!m[gc]){
m[gc]=1;
ans++;
}
}
}
}
}
cout<<ans;
return 0;
}
return 0;
}
全部评论
(1) 回帖