제출 #239584

#제출 시각아이디문제언어결과실행 시간메모리
239584ctziapoXylophone (JOI18_xylophone)C++14
47 / 100
109 ms384 KiB
#include "xylophone.h" #include<cmath> #include<map> static int A[5000]; using namespace std; void solve(int N) { int n=N; int value = query(1, N); int pf; // cout<<" find first "<<endl; //for(int i=1;i<=n;i++){ // int t=query(i,N); // if(t!=n-1){ // pf=i-1; // break; // } //} int l=1; int r=n; while(l<r){ int mid = (l+r)/2; int t=query(mid,n); if(t==n-1){ l=mid+1; } else r=mid-1; } if(query(l,n)!=n-1) l--; // cout<<"ssssssss "<<l<<endl; pf=l; int f[10000]={}; //cout<<pf<<endl; answer(pf,1); f[1]=1; // cout<<"os edo"<<endl; int a[n+3]={}; a[pf]=1; if(pf!=1){ a[pf-1] = query(pf-1,pf)+1; answer(pf-1,a[pf-1]); f[a[pf-1]]=1; } if(pf!=N){ a[pf+1] = query(pf,pf+1)+1; answer(pf+1,a[pf+1]); f[a[pf+1]]=1; } // cout<<"my answer "<<endl; //for(int i = 1; i <= N; i++) { // cout<<a[i]<<" "; //} int s=pf+2; while(s<=n){ int t=query(s-1,s); if(f[a[s-1]+t]==1){ a[s]=a[s-1]-t; answer(s,a[s]); f[a[s]]=1; s++; continue; } if(f[a[s-1]-t]==1){ a[s]=a[s-1]+t; answer(s,a[s]); f[a[s]]=1; s++; continue; } int t2=query(s-2,s); if(abs(a[s-1]-a[s-2])==t2){ if(a[s-1] > a[s-2]){ a[s]=a[s-1]-t; answer(s,a[s]); } else{ a[s]=a[s-1]+t; answer(s,a[s]); } } else { if(a[s-1] > a[s-2]){ if(a[s-1]-a[s-2] + t == t2){ a[s]=a[s-1]+t; answer(s,a[s]); } else { a[s]=a[s-1]-t; answer(s,a[s]); } } else{ if(a[s-2]-a[s-1] + t == t2){ a[s]=a[s-1]-t; answer(s,a[s]); } else { a[s]=a[s-1]+t; answer(s,a[s]); } } } // cout<<"my answer "<<endl; //for(int i = 1; i <= N; i++) { // cout<<a[i]<<" "; //} s++; } s=pf-2; while(s>=1){ int t=query(s,s+1); if(f[a[s+1]+t]==1){ a[s]=a[s+1]-t; answer(s,a[s]); f[a[s]]=1; s--; continue; } if(f[a[s+1]-t]==1){ a[s]=a[s+1]+t; answer(s,a[s]); f[a[s]]=1; s--; continue; } int t2=query(s,s+2); if(abs(a[s+1]-a[s+2])==t2){ if(a[s+1] > a[s+2]){ a[s]=a[s+1]-t; answer(s,a[s]); } else{ a[s]=a[s+1]+t; answer(s,a[s]); } } else { if(a[s+1] > a[s+2]){ if(a[s+1]-a[s+2] + t == t2){ a[s]=a[s+1]+t; answer(s,a[s]); } else { a[s]=a[s+1]-t; answer(s,a[s]); } } else{ if(a[s+2]-a[s+1] + t == t2){ a[s]=a[s+1]-t; answer(s,a[s]); } else { a[s]=a[s+1]+t; answer(s,a[s]); } } } // cout<<"my answer "<<endl; // for(int i = 1; i <= N; i++) { // cout<<a[i]<<" "; // } s--; } // cout<<"my answer "<<endl; //for(int i = 1; i <= N; i++) { // cout<<a[i]<<" "; //} }

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

xylophone.cpp: In function 'void solve(int)':
xylophone.cpp:10:6: warning: unused variable 'value' [-Wunused-variable]
  int value = query(1, N);
      ^~~~~
xylophone.cpp: At global scope:
xylophone.cpp:4:12: warning: 'A' defined but not used [-Wunused-variable]
 static int A[5000];
            ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...