제출 #1167523

#제출 시각아이디문제언어결과실행 시간메모리
1167523coco2311Snowball (JOI21_ho_t2)C++17
0 / 100
0 ms320 KiB
#include <iostream> using namespace std; #define f first #define s second #define int long long #define MAXP 3000000000000 struct fSnB{ int w,p; }; signed main(){ ios::sync_with_stdio(false);cin.tie();cout.tie(); // freopen("input.in","r",stdin); int N,Q; cin>>N>>Q; fSnB ball[N]; pair<int,int> snow[N+1]; for(int i=0;i<N;i++){ cin>>ball[i].p; ball[i].w=0; } snow[0]={-MAXP,ball[0].p}; for(int i=1;i<N;i++){ snow[i]={ball[i-1].p,ball[i].p}; } snow[N]={ball[N-1].p,MAXP}; int d,v,cd,a; for(int q=0;q<Q;q++){ cin>>d; if(d>0){ v=N; for(int i=N-1;i>=0;i--){ cd=d; while(ball[i].p+cd<=snow[v].f){ v--; } while(cd!=0 && ball[i].p<=snow[v].f){ if(ball[i].p+cd<snow[v].s){ ball[i].w+=ball[i].p+cd-snow[v].f; a=ball[i].p+cd-snow[v].f; snow[v].f=ball[i].p+cd; cd-=a; } else{ a=ball[i].p+cd-snow[i].f; ball[i].w+=snow[v].s-snow[v].f; snow[v].f=snow[v].s; cd-=a; } v--; } v++; ball[i].p+=d; } } else{ // same code but other direction v=0; d*=-1; for(int i=0;i<=N;i++){ cd=d; while(ball[i].p-cd>=snow[v].s){ v++; } while(cd!=0 && ball[i].p>=snow[v].s){ if(ball[i].p-cd>snow[v].f){ ball[i].w+=snow[v].s-(ball[i].p-cd); a=snow[v].s-(ball[i].p-cd); snow[v].s=ball[i].p-cd; cd-=a; }// else{ a=snow[i].s-(ball[i].p-cd); ball[i].w+=snow[v].s-snow[v].f; snow[v].f=snow[v].s; cd-=a; } v++; } v--; ball[i].p-=d; } } } for(int i=0;i<N-1;i++){ cout<<ball[i].w<<'\n'; } cout<<ball[N-1].w; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...