Language: C++

#include <iostream>
#include <sstream>
#include <vector>
#include <numeric>
#include <algorithm>
#include <cmath>
#include <string>
#include <map>
#include <iomanip>
#include <cstdlib>
#include <climits>
using namespace std;

//関数getinputdata宣言
vector<vector<string>> getinputdata();
vector<vector<int>> getinputdata2();
vector<vector<double>> getinputdata3();

void abc089_c(vector<vector<string>> v) {

    int n = atoi(v[0][0].c_str());

    vector<string>vec;

    for (int i = 1; i <= n; i++) {

        if (v[i][0].substr(0, 1) == "M" || v[i][0].substr(0, 1) == "A" || v[i][0].substr(0, 1) == "R" || v[i][0].substr(0, 1) == "C" || v[i][0].substr(0, 1) == "H") {
            vec.push_back(v[i][0]);
        }


    }
    map<string, int> m;

    for (auto x : vec) {

        m[x.substr(0, 1)] += 1;
    }


    int mysum = 0;
    int mcnt = m["M"];
    int acnt = m["A"];
    int rcnt = m["R"];
    int ccnt = m["C"];
    int hcnt = m["H"];

    
//    cout << "ccnt=" << ccnt<<endl;
    
    mysum += mcnt * acnt*rcnt;
    mysum += mcnt * acnt*ccnt;
    mysum += mcnt * acnt*hcnt;
    mysum += mcnt * rcnt*ccnt;
    mysum += mcnt * rcnt*hcnt;
    mysum += mcnt * ccnt*hcnt;
    mysum += acnt * rcnt*ccnt;
    mysum += acnt * rcnt*hcnt;
    mysum += acnt * ccnt*hcnt;
    mysum += rcnt * ccnt*hcnt;

    cout << mysum <<endl;



}

int main() {

    vector<vector < string>> vec_arr_result;
    //    vector<vector<int>> vec_arr_result;
    vec_arr_result = getinputdata();

    abc089_c(vec_arr_result);

    return 0;
}

//関数getinputdata実装

vector<vector<double>> getinputdata3() {

    string str;
    string ret;
    stringstream ss;
    vector<string> v1;
    vector<vector<double>> vec_arr;

    //標準入力から入力がある間ループ処理でvector配列にデータ格納
    while (getline(cin, str)) {

        v1.push_back(str);

    }

    //stringstreamを利用してvector配列v1をスペースで分解処理
    for (string s : v1) {

        vector<double> array_data;
        ss << s;

        while (!ss.eof()) {

            ss >> ret;

            array_data.push_back(atof(ret.c_str()));
        }

        //vector配列に追加
        vec_arr.push_back(array_data);

        //バッファクリア
        ss.str("");
        //ストリームクリア
        ss.clear(stringstream::goodbit);

    }

    return vec_arr;
}

//関数getinputdata実装

vector<vector<int>> getinputdata2() {

    string str;
    string ret;
    stringstream ss;
    vector<string> v1;
    vector<vector<int>> vec_arr;

    //標準入力から入力がある間ループ処理でvector配列にデータ格納
    while (getline(cin, str)) {

        v1.push_back(str);

    }

    //stringstreamを利用してvector配列v1をスペースで分解処理
    for (string s : v1) {

        vector<int> array_data;
        ss << s;

        while (!ss.eof()) {

            ss >> ret;

            array_data.push_back(atoi(ret.c_str()));
        }

        //vector配列に追加
        vec_arr.push_back(array_data);

        //バッファクリア
        ss.str("");
        //ストリームクリア
        ss.clear(stringstream::goodbit);

    }

    return vec_arr;


}

//関数getinputdata実装

vector<vector < string >> getinputdata() {

    string str;
    string ret;
    stringstream ss;
    vector<string> v1;
    vector<vector < string>> vec_arr;

    //標準入力から入力がある間ループ処理でvector配列にデータ格納
    while (getline(cin, str)) {

        v1.push_back(str);

    }

    //stringstreamを利用してvector配列v1をスペースで分解処理
    for (string s : v1) {

        vector<string> array_data;
        ss << s;

        while (!ss.eof()) {

            ss >> ret;

            array_data.push_back(ret);
        }

        //vector配列に追加
        vec_arr.push_back(array_data);

        //バッファクリア
        ss.str("");
        //ストリームクリア
        ss.clear(stringstream::goodbit);

    }

    return vec_arr;

}
#include <iostream>
#include <sstream>
#include <vector>
#include <numeric>
#include <algorithm>
#include <cmath>
#include <string>
#include <map>
#include <iomanip>
#include <cstdlib>
#include <climits>
using namespace std;

//関数getinputdata宣言
vector<vector<string>> getinputdata();
vector<vector<int>> getinputdata2();
vector<vector<double>> getinputdata3();

void abc089_c(vector<vector<string>> v) {

    int n = atoi(v[0][0].c_str());

    vector<string>vec;

    for (int i = 1; i <= n; i++) {

        if (v[i][0].substr(0, 1) == "M" || v[i][0].substr(0, 1) == "A" || v[i][0].substr(0, 1) == "R" || v[i][0].substr(0, 1) == "C" || v[i][0].substr(0, 1) == "H") {
            vec.push_back(v[i][0]);
        }


    }
    map<string, int> m;

    for (auto x : vec) {

        m[x.substr(0, 1)] += 1;
    }


    int mysum = 0;
    int mcnt = m["M"];
    int acnt = m["A"];
    int rcnt = m["R"];
    int ccnt = m["C"];
    int hcnt = m["H"];

    
//    cout << "ccnt=" << ccnt<<endl;
    
    mysum += mcnt * acnt*rcnt;
    mysum += mcnt * acnt*ccnt;
    mysum += mcnt * acnt*hcnt;
    mysum += mcnt * rcnt*ccnt;
    mysum += mcnt * rcnt*hcnt;
    mysum += mcnt * ccnt*hcnt;
    mysum += acnt * rcnt*ccnt;
    mysum += acnt * rcnt*hcnt;
    mysum += acnt * ccnt*hcnt;
    mysum += rcnt * ccnt*hcnt;

    cout << mysum <<endl;



}

int main() {

    vector<vector < string>> vec_arr_result;
    //    vector<vector<int>> vec_arr_result;
    vec_arr_result = getinputdata();

    abc089_c(vec_arr_result);

    return 0;
}

//関数getinputdata実装

vector<vector<double>> getinputdata3() {

    string str;
    string ret;
    stringstream ss;
    vector<string> v1;
    vector<vector<double>> vec_arr;

    //標準入力から入力がある間ループ処理でvector配列にデータ格納
    while (getline(cin, str)) {

        v1.push_back(str);

    }

    //stringstreamを利用してvector配列v1をスペースで分解処理
    for (string s : v1) {

        vector<double> array_data;
        ss << s;

        while (!ss.eof()) {

            ss >> ret;

            array_data.push_back(atof(ret.c_str()));
        }

        //vector配列に追加
        vec_arr.push_back(array_data);

        //バッファクリア
        ss.str("");
        //ストリームクリア
        ss.clear(stringstream::goodbit);

    }

    return vec_arr;
}

//関数getinputdata実装

vector<vector<int>> getinputdata2() {

    string str;
    string ret;
    stringstream ss;
    vector<string> v1;
    vector<vector<int>> vec_arr;

    //標準入力から入力がある間ループ処理でvector配列にデータ格納
    while (getline(cin, str)) {

        v1.push_back(str);

    }

    //stringstreamを利用してvector配列v1をスペースで分解処理
    for (string s : v1) {

        vector<int> array_data;
        ss << s;

        while (!ss.eof()) {

            ss >> ret;

            array_data.push_back(atoi(ret.c_str()));
        }

        //vector配列に追加
        vec_arr.push_back(array_data);

        //バッファクリア
        ss.str("");
        //ストリームクリア
        ss.clear(stringstream::goodbit);

    }

    return vec_arr;


}

//関数getinputdata実装

vector<vector < string >> getinputdata() {

    string str;
    string ret;
    stringstream ss;
    vector<string> v1;
    vector<vector < string>> vec_arr;

    //標準入力から入力がある間ループ処理でvector配列にデータ格納
    while (getline(cin, str)) {

        v1.push_back(str);

    }

    //stringstreamを利用してvector配列v1をスペースで分解処理
    for (string s : v1) {

        vector<string> array_data;
        ss << s;

        while (!ss.eof()) {

            ss >> ret;

            array_data.push_back(ret);
        }

        //vector配列に追加
        vec_arr.push_back(array_data);

        //バッファクリア
        ss.str("");
        //ストリームクリア
        ss.clear(stringstream::goodbit);

    }

    return vec_arr;

}


Compiler output:
a.cc:228:6: error: redefinition of 'void abc089_c(std::vector<std::vector<std::__cxx11::basic_string<char> > >)'
  228 | void abc089_c(vector<vector<string>> v) {
      |      ^~~~~~~~
a.cc:19:6: note: 'void abc089_c(std::vector<std::vector<std::__cxx11::basic_string<char> > >)' previously defined here
   19 | void abc089_c(vector<vector<string>> v) {
      |      ^~~~~~~~
a.cc:277:5: error: redefinition of 'int main()'
  277 | int main() {
      |     ^~~~
a.cc:68:5: note: 'int main()' previously defined here
   68 | int main() {
      |     ^~~~
a.cc:290:24: error: redefinition of 'std::vector<std::vector<double> > getinputdata3()'
  290 | vector<vector<double>> getinputdata3() {
      |                        ^~~~~~~~~~~~~
a.cc:81:24: note: 'std::vector<std::vector<double> > getinputdata3()' previously defined here
   81 | vector<vector<double>> getinputdata3() {
      |                        ^~~~~~~~~~~~~
a.cc:333:21: error: redefinition of 'std::vector<std::vector<int> > getinputdata2()'
  333 | vector<vector<int>> getinputdata2() {
      |                     ^~~~~~~~~~~~~
a.cc:124:21: note: 'std::vector<std::vector<int> > getinputdata2()' previously defined here
  124 | vector<vector<int>> getinputdata2() {
      |                     ^~~~~~~~~~~~~
a.cc:378:27: error: redefinition of 'std::vector<std::vector<std::__cxx11::basic_string<char> > > getinputdata()'
  378 | vector<vector < string >> getinputdata() {
      |                           ^~~~~~~~~~~~
a.cc:169:27: note: 'std::vector<std::vector<std::__cxx11::basic_string<char> > > getinputdata()' previously defined here
  169 | vector<vector < string >> getinputdata() {
      |                           ^~~~~~~~~~~~