제출 #361196

#제출 시각아이디문제언어결과실행 시간메모리
361196BartolMXylophone (JOI18_xylophone)C++17
100 / 100
181 ms748 KiB
#include "xylophone.h" #include <bits/stdc++.h> using namespace std; int n; static int A[5000]; int p[5005], bio[5005]; int dva[5005], tri[5005]; int ok(int x) { if (x<=0 || x>n) return 0; return !bio[x]; } int resi(int a, int b, int x, int y) { int c=b+x; int maxi=max(a, c), mini=min(a, b); if (ok(c) && maxi-mini==y) return c; c=b-x; maxi=max(a, b), mini=min(a, c); if (ok(c) && maxi-mini==y) return c; return -1; } void dodaj(int i, int x) { if (i<1 || i>n) return; p[i]=x; bio[x]=1; } void kraj() { for (int i=1; i<=n; ++i) answer(i, p[i]); } void solve(int N) { n=N; for (int i=1; i<n; ++i) { dva[i]=query(i, i+1); if (i+2<=n) tri[i]=query(i, i+2); } for (int poc=1; poc<=n; ++poc) { memset(bio, 0, sizeof bio); dodaj(poc, 1); dodaj(poc-1, dva[poc-1]+1); dodaj(poc+1, dva[poc]+1); int fl=1; for (int i=poc-2; i>0; --i) { int x=resi(p[i+2], p[i+1], dva[i], tri[i]); if (!ok(x)) { fl=0; break; } dodaj(i, x); } for (int i=poc+2; i<=n; ++i) { int x=resi(p[i-2], p[i-1], dva[i-1], tri[i-2]); if (!ok(x)) { fl=0; break; } dodaj(i, x); } if (fl) { kraj(); return; } } }

컴파일 시 표준 에러 (stderr) 메시지

xylophone.cpp:7:12: warning: 'A' defined but not used [-Wunused-variable]
    7 | static int A[5000];
      |            ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...