제출 #1175425

#제출 시각아이디문제언어결과실행 시간메모리
1175425adkjtXylophone (JOI18_xylophone)C++20
0 / 100
0 ms416 KiB
#include "xylophone.h" #include<bits/stdc++.h> using namespace std; //static int A[5000]; int diff[5555],trend[5555],dir[5555],ans[5555]; void solve(int n) { for(int i=1; i<=n-1; i++) diff[i]=query(i,i+1); for(int i=1; i<=n-2; i++) trend[i]=query(i,i+2); dir[1]=1; for(int i=1; i<=n-2; i++) { if(trend[i]==diff[i]+diff[i+1]) dir[i+1]=dir[i]; else dir[i+1]=dir[i]*-1; } int mn=1,mx=n; ans[1]=1; for(int i=1; i<n; i++) ans[i+1]=diff[i]*dir[i]+ans[i],mn=min(mn,ans[i+1]),mx=max(mx,ans[i+1]); for(int i=1; i<=n; i++)cout<<ans[i]<<' '; if(mn<1) { for(int i=1; i<=n; i++) ans[i]+=(1-mn); } else for(int i=1; i<=n; i++) ans[i]-=mx-n; int idx1,idxn; for(int i=1; i<=n; i++) { if(ans[i]==1) idx1=i; if(ans[i]==n) idxn=i; } if(idx1>idxn) { for(int i=1; i<=n-1; i++) dir[i]*=-1; int mn=1,mx=n; ans[1]=1; for(int i=1; i<n; i++) ans[i+1]=diff[i]*dir[i]+ans[i],mn=min(mn,ans[i+1]),mx=max(mx,ans[i+1]); //for(int i=1; i<=n; i++)cout<<ans[i]<<' '; if(mn<1) { for(int i=1; i<=n; i++) ans[i]+=(1-mn); } else for(int i=1; i<=n; i++) ans[i]-=mx-n; //reverse(ans+1,ans+1+n); } //for(int i=1; i<=n; i++)cout<<ans[i]<<' '; for(int i=1; i<=n; i++) answer(i,ans[i]); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...