BRAVEDUCK 문제 오답소스 좀 봐주세요.

  • 구희재
    구희재

    //왜 오답이 나오는지 모르겠습니다.
    //몇시간 고민했는데 도와주세요..
    //불가능한 테스트케이스를 알고싶습니다.

    #include <iostream>
    using namespace std;
    
    typedef struct Q{
        int x;
        int y;
    }MyQueue;
    
    MyQueue q[10001];
    int front = 0;
    int rear = 0;
    
    void inqueue(int a, int b)
    {
        q[front].x = a;
        q[front++].y = b;
    
    }
    
    int* dequeue()
    {
        int ret[2] = { 0, };
        ret[0] = q[rear].x;
        ret[1] = q[rear++].y;
    
        return ret;
    }
    
    double pow2(int x)
    {
        return x*x;
    }
    
    bool sol(int s[], int e[], int jump, int dol[][3], int num)
    {
    
        int otp = 0;
    
        inqueue(s[0], s[1]);
        int esc = 0;
    
        while (front != rear)
        {
            int *check = dequeue();
            int rcheck[2] = { 0, };
            rcheck[0] = check[0];
            rcheck[1] = check[1];
    
            int egap = pow2((e[0] - rcheck[0])) + pow2((e[1] - rcheck[1]));
            if (jump*jump >= egap)  {
                esc = true;
                break;
            }
    
            for (int j = 0; j < num; j++)
            {
                int gap = pow2((dol[j][0] - rcheck[0])) + pow2((dol[j][1] - rcheck[1]));
    
                if (jump*jump >= gap)
                {
                    if (dol[j][2] != 1)
                    {
                        inqueue(dol[j][0], dol[j][1]);
                        dol[j][2] = 1;
                    }
                }
                else{
                    esc = false;
                }
            }
    
        }
        return esc;
    }
    
    int main()
    {
        //note
        int testcase = 0;
        cin >> testcase;
    
        for (int i = 0; i < testcase; i++)
        {
            int jump = 0;
            cin >> jump;
    
            int start[2] = { 0, };
            int end[2] = { 0, };
            cin >> start[0] >> start[1];
            cin >> end[0] >> end[1];
    
            int dolnum = 0;
            cin >> dolnum;
    
            int dol[101][3] = { 0, };
    
            for (int j = 0; j < dolnum; j++)
            {
                cin >> dol[j][0] >> dol[j][1];
            }
            // input
    
            int val = sol(start, end, jump, dol, dolnum);
    
            if (val == true)
                cout << "YES" << endl;
            else
                cout << "NO" << endl;
            //END
    
            //초기화
            for (int k = 0; k < front; k++)
            {
                 q[k].x = q[k].y = 0;
            }
            front = 0;
            rear = 0;
        }
    
        return 0;
    }
    ~~~ ( )
    

    8년 전
2개의 댓글이 있습니다.
  • seico75
    seico75

    불가능한 case 보다는 dequeue 함수 때문이 아닌가 합니다.
    ret 는 내부 변수라서 스택에 잡히는데 포인터로 리턴하면 그 값이 유지된다는 보장이 없습니다. ret 를 static 으로 잡아서 테스트 해보심이..


    8년 전 link
  • 구희재
    구희재

    답변 감사합니다. 덕분에 해결했습니다ㅠㅠ


    8년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.