답안 #1090749

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1090749 2024-09-18T16:27:48 Z vjudge1 게임 (IOI13_game) C++17
0 / 100
2 ms 1220 KB
#include <bits/stdc++.h>
#include "game.h"

using namespace std;
struct node{
    node *ll=nullptr;
    node *lr=nullptr;
    node *rl=nullptr;
    node *rr=nullptr;
    node *tatko=nullptr;
    long long value=0;
    pair<long long,long long> x;
    pair<long long,long long> y;
};


// trgni voa posle
long long gcd2(long long x,long long y)
{
    if (x%y==0) return y;
    return gcd2(y,x%y);
}

node koren;
void init(int R,int C)
{
    koren.x.first =0;
    koren.y.first =0;
    koren.x.second=R-1;
    koren.y.second=C-1;
}

void update1(long long r=0,long long c=0,long long v=0,node &n=koren)
{
    cout<< "ulava u "<<n.x.first<<" "<<n.x.second<< "  "<<n.y.first<<" "<<n.y.second<<endl;
    system("pause");
    if (n.x.first==n.x.second && n.y.first==n.y.second)
    {
        n.value = v;
        return;
    }

    long long midx = (n.x.second+n.x.first)/2;
    long long midy = (n.y.second+n.y.first)/2;

    if (n.x.first<=r && r<=midx)
    {
        if (n.y.first<=c && c<=midy)
        {
            if (n.ll==nullptr)
            {
                node *nov = new node;
                n.ll = nov;
                nov->x={n.x.first,midx};
                nov->y={n.y.first,midy};
                nov->tatko=&n;
                nov->value = v;
            }
            update1(r,c,v,*n.ll);
            //n.ll->value = gcd2(n.ll->value,v);
        }
        if (n.y.second>=c && c>midy)
        {
            if (n.lr==nullptr)
            {
                node *nov = new node;
                n.lr=nov;
                nov->x={n.x.first,midx};
                nov->y={midy+1,n.y.second};
                nov->tatko=&n;
                nov->value = v;
            }
            update1(r,c,v,*n.lr);
            n.lr->value = gcd2(n.lr->value,v);
        }
    }

    if (n.x.second<=r && r>midx)
    {
        if (c>=n.y.first && c<=midy)
        {
            if (n.rl==nullptr)
            {
                node *nov = new node;
                n.rl=nov;
                nov->x={midx+1,n.x.second};
                nov->y={n.y.first,midy};
                nov->tatko=&n;
                nov->value = v;
            }
            update1(r,c,v,*n.rl);
            //n.rl->value = gcd2(n.rl->value,v);
        }
        if (c<=n.y.second && c>midy)
        {
            if (n.rr==nullptr)
            {
                node *nov = new node;
                n.rr=nov;
                nov->x={midx+1,n.x.second};
                nov->y={midy+1,n.y.second};
                nov->tatko=&n;
                nov->value = v;
            }
            update1(r,c,v,*n.rr);
            //n.rr->value = gcd2(n.rr->value,v);
        }
    }
    if (n.value == 0) n.value=v;
    else n.value = gcd2(n.value,v);
}

long long calculate1(long long lx=0,long long ty=0,long long rx=0,long long by=0,node &n=koren)
{
    if (lx<=n.x.first && rx>=n.x.second && ty<=n.y.first && by>=n.y.second) return n.value;
    long long odg=0;
    long long midx=(n.x.first+n.x.second)/2;
    long long midy=(n.y.first+n.y.second)/2;

    if (lx<=midx && rx>=n.x.first)
    {
        if (ty<=midy && by>=n.y.first && n.ll!=nullptr)
        {
            long long t = calculate1(lx,ty,rx,by,*n.ll);
            if (odg==0) odg = t;
            else odg = gcd2(odg,t);
        }
        if (midy<by && n.y.second>=ty && n.lr!=nullptr)
        {
            long long t = calculate1(lx,ty,rx,by,*n.lr);
            if (odg==0) odg = t;
            else odg = gcd2(odg,t);
        }
    }

    if (midx<rx && n.x.second>=lx)
    {
        if (ty<=midy && by>=n.y.first && n.rl!=nullptr)
        {
            long long t = calculate1(lx,ty,rx,by,*n.rl);
            if (odg==0) odg = t;
            else odg = gcd2(odg,t);
        }
        if (midy<by && n.y.second>=ty && n.rr!=nullptr)
        {
            long long t = calculate1(lx,ty,rx,by,*n.rr);
            if (odg==0) odg = t;
            else odg = gcd2(odg,t);
        }
    }

    return odg;
}

void update(int P, int Q,long long K)
{
    update1(P,Q,K);
}
long long calculate(int P, int Q, int U, int V)
{
    return calculate1(P,Q,U,V);
}
/*
int main()
{

    init(2,3);
    update(0,0,20);
    update(0,2,15);
    update(1,1,12);
    cout<<calculate(0,0,0,2)<<endl;
    cout<<calculate(0,0,1,1)<<endl;
    update(0,1,6);
    update(1,1,14);
    cout<<calculate(0,0,0,2)<<endl;
    cout<<calculate(0,0,1,1)<<endl;


    return 0;
}*/

Compilation message

game.cpp: In function 'void update1(long long int, long long int, long long int, node&)':
game.cpp:36:11: warning: ignoring return value of 'int system(const char*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   36 |     system("pause");
      |     ~~~~~~^~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 1216 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 1216 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 1212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 1220 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 1212 KB Output isn't correct
2 Halted 0 ms 0 KB -