题解:CF98A Help Victoria the Wise
题目大意
给定六个大写字母,每个字母代表一种颜色。 用六个字母代表的颜色正好对应正方体的六个面的颜色,请你统计有多少种不同的涂色方案。
思路
简单的一道打表题
只需要列举出每一种情况就可以了。
分类讨论就行:
| 情况 | 答案 |
|---|---|
| 只有一种颜色 | |
| 有两种颜色,一种五个,另一种一个 | |
| 有两种颜色,一种两个,另一种四个 | |
| 有两种颜色,都是三个 | |
| 有三种颜色,第一,二种都是一个,第三种四个 | |
| 有三种颜色,第一种一个,第二种两个,第三种三个 | |
| 有三种颜色,这三种都是两个 | |
| 有四种颜色,第一,二,三种都是一个,第三种三个 | |
| 有四种颜色,第一,二种都是一个,第三,四种都是两个 | |
| 有五种颜色,第一,二,三,四种都是一个,第五种两个 | |
| 有六种颜色,每种一个 |
AC Code
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e6+7;
string s;
map<int,int>mp;
int res,n,a[10];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>s;
int n=s.size();
s=" "+s;
for(int i=1;i<=n;i++){
if(s[i]=='R'){
a[1]++;
}else if(s[i]=='O'){
a[2]++;
}else if(s[i]=='Y'){
a[3]++;
}else if(s[i]=='G'){
a[4]++;
}else if(s[i]=='B'){
a[5]++;
}else if(s[i]=='V'){
a[6]++;
}
}
sort(a+1,a+7);
for(int i=1;i<=n;i++){
res=res*10+a[i];
}
mp[6]=1;
mp[15]=1;
mp[24]=2;
mp[33]=2;
mp[114]=2;
mp[123]=3;
mp[222]=6;
mp[1113]=5;
mp[1122]=8;
mp[11112]=15;
mp[111111]=30;
cout<<mp[res];
return 0;
}