Saturday, 5 May 2012

UVa 350 Pseudo-Random Numbers Solution

#include<iostream>
#include<string>
#include<cstring>
#include<sstream>
#include<cctype>
#include<string.h>
#include<algorithm>
#include<cmath>
#include<stack>
#include<fstream>
#include<cstdlib>
#include<vector>
#include<map>
#include<utility>
#include<iomanip>
#include<queue>
using namespace std;
#define clr(a) memset(a,0,sizeof(a))
#define PB push_back

int main()
{
    int Z,I,M,L,i,cs=1,end,j;
    map<int, int>mp;
    vector<int>V;
while(cin>>Z>>I>>M>>L)
{
    if(Z==0 && I==0 && M==0 && L==0) return 0;
    mp.clear();
    V.clear();
    V.PB(L);
    mp[L]=1;
    i=1;
    while(1)
    {
        L=((Z*L)+I)%M;
        if(mp[L]==1)
        {

            end=L;
            break;
        }
        else
        {
           mp[L]=1;
           i++;
           V.PB(L);
        }
    }
    if(i!=1)
    for(j=0;j<V.size();j++)
    {
        //cout<<V[j]<<" ";
        if(V[j]==end)
        break;
        i--;
    }
    cout<<"Case "<<cs<<": "<<i<<endl;
    cs++;
}
return 0;
}

No comments:

Post a Comment