gotutiyan’s blog

競技プログラミングをやったりopenframeworksでお絵かきをしたりしています。

AOJ 0049 Blood Groups

問題
血液型の分類 | Aizu Online Judge
各血液型の人数を数える問題です。

解説
入力には生徒の番号と謎のカンマが入っていますが、これらは問題を解く上では関係ありません。
数えるための配列を作って、v[0]~v[3]までをA,B,AB,O型のように、出力する順番で対応させます。
データはいくつ来るか分からないので、while(cin>>)を使って読める分だけ読みます。
実際に使うのはstring s だけで、このsによって配列のどの添字に足すかを分岐させます。

最後に配列の中身を4つ分出力して終了です。

#include <bits/stdc++.h>
#define rep(i,j,k) for(int i=(int)j;i<(int)k;i++)
#define rrep()
#define Sort(x) sort((x).begin(),(x).end())
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define vi vector<int>
#define INF (int)1e9
#define INFL 1e18
#define MOD 1000000007
#define pb push_back
#define MP make_pair
typedef long long int ll;
typedef std::pair<int,int> P;
int D=1;
int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
 
using namespace std;
 
int main(){
    int a;
    char c;
    string s;
    int v[4]={};
     
    while(cin>>a>>c>>s){
        if(s=="A")v[0]++;
        else if(s=="B")v[1]++;
        else if(s=="AB")v[2]++;
        else v[3]++;
    }
    rep(i,0,4)cout<<v[i]<<endl;
     
     
     
    return 0;
}