土下座しながら探索中

主に競技プログラミング

AOJ 1295 : Cubist Artwork

問題リンク:Cubist Artwork | Aizu Online Judge

問題概要:
キューブをいくつか積み上げて作った柱をいくつかならべてつくったオブジェクトの形が指定されるのでフロントとサイドからみたときにその指定通りになっているようなオブジェクトをつくるために必要なキューブの数の最小の個数をもとめよ

使用した言語:C++

解法:
フロントから見たときの柱のうち、サイドで要求された柱と同じ高さのものがあれば再利用する。

コード:

#include<iostream>
#include<map>
 
using namespace std;
 
int main()
{
   
  while(true)
    {
      int a,b,cnt = 0;
      cin >> a >> b;
      if(a+b == 0)break;
      map<int,int> exist;
      for(int i=0;i<a;i++)
    {
      int in;
      cin >> in;
      exist[in]++,cnt+=in;
    }
 
 
      for(int i=0;i<b;i++)
    {
      int in;
      cin >> in;
      if(!exist[in])
        {
          cnt += in;
        }
      else
        {
          exist[in]--;
        }
    }
      cout << cnt << endl;
    }
  return 0;
}