题解:CF98A Help Victoria the Wise

· · 题解

题目大意

给定六个大写字母,每个字母代表一种颜色。 用六个字母代表的颜色正好对应正方体的六个面的颜色,请你统计有多少种不同的涂色方案。

思路

简单的一道打表题

只需要列举出每一种情况就可以了。

分类讨论就行:

情况 答案
只有一种颜色 1
有两种颜色,一种五个,另一种一个 1
有两种颜色,一种两个,另一种四个 2
有两种颜色,都是三个 2
有三种颜色,第一,二种都是一个,第三种四个 4
有三种颜色,第一种一个,第二种两个,第三种三个 3
有三种颜色,这三种都是两个 6
有四种颜色,第一,二,三种都是一个,第三种三个 5
有四种颜色,第一,二种都是一个,第三,四种都是两个 8
有五种颜色,第一,二,三,四种都是一个,第五种两个 15
有六种颜色,每种一个 30

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;
}

完结撒花