寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

AtCoder Problems in C++ #A - JOI 紋章 (JOI Emblem)

第13回日本情報オリンピック 本選(過去問)から、その提出コードの解答例です。
AtCoderとは、コンテストを通じて、プログラミングやアルゴリズムを学習するサービスです。
atcoder.jp
プログラミングコンテストとは、「与えられた問題をいかに素早く、正確に」解くことができるかを競うものです。
競技プログラミング」を略して、「競プロ」などと呼ばれています。

#A - JOI 紋章 (JOI Emblem)

atcoder.jp

僕が作成、提出したコードは、以下のとおりです。

/*
AtCoder Problems in C++
#A - JOI 紋章 (JOI Emblem)
https://atcoder.jp/contests/joi2014ho/tasks/joi2014ho1
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(void){
  ll m,n;
  cin>>m>>n;
  vector<string> s(m);
  for(ll i=0;i<m;i++){
    cin>>s[i];
  }
  ll ans1=0,ans2=0;
  vector<string> t(2);
  cin>>t[0]>>t[1];
  map<ll,map<ll,map<char,ll>>> mmm;
  for(ll i=0;i<m-1;i++){
    for(ll j=0;j<n-1;j++){
      ll x=0;
      ll p=0,q=0,r=0,o=0;
      for(ll k=0;k<2;k++){
        for(ll l=0;l<2;l++){
          if(s[i+k][j+l]!=t[k][l]){
            x++;
            p=i+k;
            q=j+l;
            r=k;
            o=l;
          }
        }
      }
      if(x==0){
        ans1++;
      }
      if(x==1){
        mmm[p][q][t[r][o]]++;
      }
      ans2=max(ans2,mmm[p][q][t[r][o]]);
    }
  }
  cout<<ans1+ans2<<endl;
  return 0;
}