Cod sursa(job #2755464)

Utilizator IonDragosIon Dragos IonDragos Data 27 mai 2021 13:14:21
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.67 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("panda.in");
ofstream g("panda.out");

int p,n,m,t,lin,col,s,x,r,cont,a,b,a1,b1,rasp1,rasp2;
long long w,mat[509][509],p10,k,kk,aux,plan[509][509];
pair <int,int> mancare[250009];
int l[]={-1,0,1,0};
int c[]={0,1,0,-1};
queue<pair<int,int>> q;

int main()
{
    f>>p>>n>>m>>t>>lin>>col>>k>>s;
    for(int i=1;i<=t;i++)
        f>>mancare[i].first>>mancare[i].second;

    p10=1;
    w=0;
    while(k!=0)
    {
        r=k%2;
        w=p10*r+w;
        p10*=10;
        k/=2;
    }
    k=w;

    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            f>>x;
            p10=1;
            w=0;
            while(x!=0)
            {
                r=x%2;
                w=p10*r+w;
                p10*=10;
                x/=2;
            }

            kk=k;
            bool ok=1;
            for(int q=1;q<=s;q++)
            {
                if((kk%10)==(w%10))
                {
                    ok=0;
                    break;
                }
                kk/=10;
                w/=10;

            }

            if(ok==1)
                mat[i][j]=1;
        }
    }


    if(p==1)
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                cont+=mat[i][j];
            }
        }
        g<<cont-1;
    }
    else
    {
        for(int i=1;i<=t;i++)
        {
            if(mat[mancare[i].first][mancare[i].second]==1)
                mat[mancare[i].first][mancare[i].second]=2;
        }
        mat[lin][col]=3;
        plan[lin][col]=1;
        q.push({lin,col});
        while(!q.empty() && rasp1==0)
        {
            a=q.front().first;
            b=q.front().second;
            for(int r=0;r<=3;r++)
            {
                a1=a+l[r];
                b1=b+c[r];
                if(mat[a1][b1]==1 && plan[a1][b1]==0)
                {
                    plan[a1][b1]=plan[a][b]+1;
                    q.push({a1,b1});
                }
                if(mat[a1][b1]==2)
                {
                    rasp1=plan[a][b];
                    rasp2++;
                }
            }
            q.pop();
        }
    for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                g<<mat[i][j]<<' ';
            }
            g<<endl;
        }
        g<<endl;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                g<<plan[i][j]<<' ';
            }
            g<<endl;
        }
        g<<rasp1<<' '<<rasp2;
    }



    return 0;
}