結果
問題 | No.871 かえるのうた |
ユーザー |
![]() |
提出日時 | 2019-08-30 21:58:29 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 115 ms / 2,000 ms |
コード長 | 907 bytes |
コンパイル時間 | 1,498 ms |
コンパイル使用メモリ | 169,164 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-11-30 10:46:32 |
合計ジャッジ時間 | 4,254 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 49 |
ソースコード
#include<bits/stdc++.h> #define REP(i,n) for(int i=0,i##_len=(n);i<i##_len;++i) #define rep(i,a,b) for(int i=int(a);i<int(b);++i) #define All(x) (x).begin(),(x).end() using namespace std; int main(){ int N,K;cin>>N>>K; K--; vector<long long> X(N),A(N); REP(i,N) cin>>X[i]; REP(i,N) cin>>A[i]; vector<long long> ranl(N),ranr(N); REP(i,N) { ranl[i]=X[i]-A[i],ranr[i]=X[i]+A[i]; } int l=K-1,r=K+1; long long left=ranl[K]; long long right=ranr[K]; while(0<=l||r<N){ bool nuke=true; if(0<=l&&left<=X[l]){ nuke=false; left=min(left,ranl[l]); right=max(right,ranr[l]); l--; } if(r<N&&X[r]<=right){ nuke=false; right=max(ranr[r],right); left=min(left,ranl[r]); r++; } if(nuke) break; } cout<<r-l-1<<endl; }