機械翻訳(情報学オリンピック1冊通-T 1401)


【タイトル説明】
朝のパソコンには機械翻訳ソフトがインストールされていて、彼はよくこのソフトで英語の文章を翻訳しています.
この翻訳ソフトの原理は簡単で、最初から最後まで、英語の単語を順番に対応する中国語の意味で置き換えています.すべての英語の単語に対して、ソフトウェアはまずメモリの中でこの単語の中国語の意味を探して、メモリの中にあれば、ソフトウェアはそれを使って翻訳します;メモリにない場合、ソフトウェアは外部メモリの辞書内で検索し、単語の中国語の意味を調べて翻訳し、この単語と訳義をメモリに入れて、後続の検索と翻訳に備えます.
メモリにM個のセルがあると仮定し,各セルに単語と訳義を1つ格納できる.ソフトウェアが新しい単語をメモリに格納する前に、現在のメモリに格納されている単語の数がM−1を超えない場合、ソフトウェアは新しい単語を未使用のメモリユニットに格納します.メモリにM個の単語が格納されている場合、ソフトウェアは最も早くメモリに入った単語を空にし、ユニットを空けて、新しい単語を格納します.
英語の文章の長さをN個の単語と仮定する.この翻訳待ちの文章を与えて、翻訳ソフトは何回辞書を探す必要がありますか?翻訳が始まる前に、メモリに単語がないとします.
【入力】
2行です.行ごとに2つの数の間に1つのスペースで区切られます.
第1の動作は2つの正の整数MとNであり、メモリ容量と文章の長さを表す.
第2の行為はN個の非負の整数で、文章の順序に従って、各数(大きさは1000を超えない)は1つの英語の単語を表す.文章中の2つの単語は同じ単語であり、それらが対応する非負の整数が同じ場合にのみ使用されます.
【出力】
合計1行で、ソフトウェアが辞書を引く回数を必要とする整数が含まれています.
【入力サンプル】
3 7 1 2 1 5 4 4 1
【出力サンプル】
5
【ソースプログラム】
#include
using namespace std;

void replace();
int a[1001]= {0};
int ans=0;
int m,n;
int x;

int main()
{
    int i;

    cin>>m>>n;
    for(i=1; i<=n; i++)
    {
        cin>>x;//    
        if(a[x]==0&&ans=m)//        
    {
        ans++;
        sum=0;
        for(i=0; i<=1000; i++)
        {
            if(a[i]>=1)//              
            {
                a[i]=a[i]-1;
                sum++;
            }
            if(sum==m)//        
                break;
        }
        if(m>0)//           
            a[x]=m;
    }
}