Cod sursa(job #1910407)

Utilizator Daria09Florea Daria Daria09 Data 7 martie 2017 16:47:17
Problema Struti Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.24 kb
#include <iostream>
#include <fstream>
#define nmax 103
using namespace std;
ifstream f("elicop.in");
ofstream g("elicop.out");
int sump[nmax][nmax],sums[nmax][nmax],n,m,elicop[45],n1,n2;
bool a[nmax][nmax];
void principala1(int x1,int y1,int x2,int y2,int q)
{
    int suma=0,i;
    for(i=0;i<=x2-x1;i++)suma+=sump[x2][y2-i]-sump[x1+i-1][y1-1];
    if(suma==(x2-x1+1)*(x2-x1+2)/2)
        n1++;
    if(suma<=(x2-x1+1)*(x2-x1+2)/4)
    {
        n2++;
        elicop[n2]=q;
    }
}
void principala2(int x1,int y1,int x2,int y2,int q)
{
    int suma=0,i;
    for(i=0;i<=x2-x1;i++)suma+=sump[x2-i][y2]-sump[x1-1][y1+i-1];
    if(suma==(x2-x1+1)*(x2-x1+2)/2)
        n1++;
    if(suma<=(x2-x1+1)*(x2-x1+2)/4)
    {
        n2++;
        elicop[n2]=q;
    }
}
void secundara1(int x1,int y1,int x2,int y2,int q)
{
    int suma=0,i;
    for(i=0;i<=x2-x1;i++)suma+=sums[x2][y2+i]-sums[x1+i-1][y1+1];
    if(suma==(x2-x1+1)*(x2-x1+2)/2)
        n1++;
    if(suma<=(x2-x1+1)*(x2-x1+2)/4)
    {
        n2++;
        elicop[n2]=q;
    }
}
void secundara2(int x1,int y1,int x2,int y2,int q)
{
    int suma=0,i;
    for(i=0;i<=x2-x1;i++)suma+=sums[x2-i][y2]-sums[x1-1][y1-i+1];
    if(suma==(x2-x1+1)*(x2-x1+2)/2)
        n1++;
    if(suma<=(x2-x1+1)*(x2-x1+2)/4)
    {
        n2++;
        elicop[n2]=q;
    }
}
void solve()
{
    int i,j,k,q,x1,x2,y1,y2,p;
    f>>n>>m;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
    {
        f>>a[i][j];
        sump[i][j]=a[i][j]+sump[i-1][j-1];
        sums[i][j]=a[i][j]+sums[i-1][j+1];
    }
    f>>k;
    for(q=1;q<=k;q++)
    {
        f>>x1>>y1>>x2>>y2>>p;
        if(p==-1&&(x1-x2>0&&y1-y2>0))principala1(x2,y2,x1,y1,q); else
        if(p==-1&&(x1-x2<0&&y1-y2<0))principala1(x1,y1,x2,y2,q); else
        if(p==1&&(x1-x2<0&&y1-y2<0))principala2(x1,y1,x2,y2,q); else
        if(p==1&&(x1-x2>0&&y1-y2>0))principala2(x2,y2,x1,y1,q); else
        if(p==-1&&x2>x1)secundara1(x1,y1,x2,y2,q); else
        if(p==-1&&x2<x1)secundara1(x2,y2,x1,y1,q); else
        if(p==1&&x2>x1)secundara2(x1,y1,x2,y2,q); else
        secundara2(x2,y2,x1,y1,q);
    }
    g<<n1<<'\n'<<n2<<" ";
    for(i=1;i<=n2;i++)
        g<<elicop[i]<<" ";
}
int main()
{
    solve();
    return 0;
}