avoid 문제 입력값이 이상한것 같아요

  • GilDong
    GilDong

    avoid 문제에서 지점의수가 100이 넘는 값이 입력되기도 하고, 가고자 하는 지점의 값이 지점의 수를 넘는 값이 입력되기도 합니다.
    이거 잘못된거 아닌가요?


    10년 전
16개의 댓글이 있습니다.
  • JongMan
    JongMan

    아래 코드를 돌려보니까 잘 돌아간걸로 봐서 아니라고 생각이 됩니다만.. 다시 한번 확인해 보시겠어요?

    rl = lambda: raw_input().strip()
    
    c = int(rl())
    assert 1 <= c <= 50
    
    for cc in xrange(c):
        v, e, n = map(int, rl().split())
        for i in xrange(e):
            a, b, c = map(int, rl().split())
            assert 1 <= a <= v
            assert 1 <= b <= v
            assert 1 <= n <= 100
        want = map(int, rl().split())
        assert len(want) == n
        assert len(set(want)) == n
        assert all(1 <= c <= v for c in want)
        for i in xrange(n):
            print '0/1'
    

    10년 전 link
  • GilDong
    GilDong

    참고로 변수는 아래처럼 설정했어요

    int spotAmountTest[50];
    int wayAmountTest[50];
    int destAmountTest[50];
    int wayTestA[50][4950];
    int wayTestB[50][4950];
    int wayTestC[50][4950];
    int destTest[50][100];
    

    10년 전 link
  • GilDong
    GilDong
    int repeat=0;
    int ptFrom,ptTo,weightNum;
    scanf("%d",&repeat);
    if(repeat>50||repeat<1)
    {
        while(1) int*k=(int*)malloc(sizeof(int));
    }
    for(int i=0;i<repeat;i++)
    {
        scanf("%d %d %d",&spotAmountTest[i],&wayAmountTest[i],&destAmountTest[i]);
        if(spotAmountTest[i]>100||spotAmountTest[i]<1)
        {
            while(1) int*k=(int*)malloc(sizeof(int));
        }
        if(wayAmountTest[i]>spotAmountTest[i]*(spotAmountTest[i]-1)/2||wayAmountTest[i]<1)
        {
            while(1) int*k=(int*)malloc(sizeof(int));
        }
        if(destAmountTest[i]>spotAmountTest[i]||destAmountTest[i]<1)
        {
            while(1) int*k=(int*)malloc(sizeof(int));
        }
        for(int j=0;j<wayAmountTest[i];j++)
        {
            scanf("%d %d %d",&wayTestA[i][j],&wayTestB[i][j],&wayTestC[i][j]);
            if(wayTestA[i][j]>spotAmountTest[i]||wayTestA[i][j]<1)
            {
                while(1) int*k=(int*)malloc(sizeof(int));
            }
            if(wayTestB[i][j]>spotAmountTest[i]||wayTestB[i][j]<1)
            {
                while(1) int*k=(int*)malloc(sizeof(int));
            }
            if(wayTestC[i][j]>100||wayTestC[i][j]<1)
            {
                while(1) int*k=(int*)malloc(sizeof(int));
            }
        }
        for(int j=0;j<destAmountTest[i];j++)
        {
            scanf("%d",&destTest[i][j]);
            if(destTest[i][j]<1||destTest[i][j]>spotAmountTest[i])
            {
                while(1) int*k=(int*)malloc(sizeof(int));
            }
        }
    }
    

    이렇게 하고 제출하니 메모리 초과 런타임 에러가 발생합니다


    10년 전 link
  • GilDong
    GilDong

    설명하자면 노드 개수 V,경로 개수 N, 희망노드 K라고 하면
    V>100 혹은 V<1 이면 에러발생
    N>V*(V-1)/2 혹은 N<1 이면 에러 발생
    K>V 혹은 K<1 이면 에러 발생
    모두 통과하면 다음을 N번 반복
    경로 A 에서 경로 B로 가는 거리가 C분이면
    A>V 혹은 A<1 이면 에러 발생
    B>V 혹은 B<1 이면 에러 발생
    C>100 혹은 C<1 이면 에러 발생
    이것도 통과하면 다음을 K번 반복
    희망경로를 Z라 하면
    Z<1 혹은 Z>V 이면 에러 발생


    문제있나요?


    10년 전 link
  • Being
    Being

    메모리 초과 런타임 에러가 테스트 데이터가 틀렸다는 증거라는 말씀이신가요?


    10년 전 link
  • Being
    Being

    아 저런 테스트 코드를 따로 돌리셨다는 말씀이군요.


    10년 전 link
  • Being
    Being

    데이터 중에 소요 시간이 1에서 100 사이라는 부분이 성립하지 않는 케이스가 있네요. 제보 감사합니다.


    10년 전 link
  • Being
    Being

    해당 문제 디스크립션을 수정하였습니다.


    10년 전 link
  • GilDong
    GilDong

    계속 오류뜨는데 뭐가 바뀌었나요?


    10년 전 link
  • JongMan
    JongMan

    아 이런 원래 확인할 때 가중치 확인을 잘못했군요. ㅜㅜ

    데이터가 바뀐 것이 아니라 디스크립션이 바뀌었습니다. C의 범위는 1부터 10000까지이니 해당 부분을 수정하고 다시 제출해보세요.


    10년 전 link
  • GilDong
    GilDong

    소요시간이 1~100일때 성립하지 않은 케이스가 어떤건지 알수있나요? 계속 제출해도 에러가 발생합니다 ㅜㅜ 제 생각으로는 100이나 10000이나 크게 중요한거라고 생각하지 않았는데 말입니다


    10년 전 link
  • Being
    Being

    위에 언급하신 테스트 코드와 제출하셨던 테스트 코드를 바탕으로 데이터를 검증해보았는데 문제가 없음을 확인했습니다.


    10년 전 link
  • GilDong
    GilDong

    제코드가 틀린부분이 있고 데이터는 문제가 없다는 말씀이신가요? 며칠째 고민중인데 소요시간이 1~100이면 안되고 1~10000이면 되는 케이스가 뭘까요;


    10년 전 link
  • Being
    Being

    네, 그런데 뒷부분에 언급하신 말씀이 무슨 의미인지 잘 모르겠네요. 1~100이면 안되고 1~10000이면 된다는 게 어떤 말씀이신지요?


    10년 전 link
  • GilDong
    GilDong

    수정하기전에 소요시간이 1~100이였잖아요 그런데 제가 문제제기 하고나서 1~10000으로 바뀌었는데 이게 처음부터 1~10000사이 값이 입력된건데 문제에서 표기가 잘못된거뿐이였나요?


    10년 전 link
  • Being
    Being

    네 그렇습니다.


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