読者です 読者をやめる 読者になる 読者になる

Tamflexの貯蔵庫

やる気のない備忘録

codingame - Mayan Calculation

連想配列を使えば楽に解ける
long long を使うことに注意

#include <bits/stdc++.h>
#define REP(i,n) for(int i=0;i<n;i++)

using namespace std;

typedef long long ll;

int main()
{
  string s;
  ll l,h,ans,x[2]; cin>>l>>h;
  vector<string> a(20,"");
  map<string,ll> b;
  REP(i,l)
  {
    getline(cin,s);
    if(s==""){i--;continue;}
    REP(j,s.size()) a[j/h]+=s[j];
    REP(j,20) a[j] += "\n";
  }
  REP(i,20) b[a[i]]=i;
  REP(u,2)
  {
    x[u] = 0;
    int n; cin >> n;
    REP(i,n/l)
    {
      string t="";
      REP(i,l)
      {
        getline(cin,s);
        if(s==""){i--;continue;}
        t+=s+"\n";
      }
      x[u]*=20;
      x[u]+=b[t];
    }
  }
  cin >> s;
  switch(s[0])
  {
    case '+':
      ans=x[0]+x[1];
      break;
    case '-':
      ans=x[0]-x[1];
      break;
    case '*':
      ans=x[0]*x[1];
      break;
    case '/':
      ans=x[0]/x[1];
      break;
  }
  s = "";
  if(ans == 0) s = a[0];
  while(ans!=0)
  {
    s = a[ans%20] + s;
    ans /= 20;
  }
  cout << s;
  return 0;
}