結果
問題 | No.2374 ASKT Subsequences |
ユーザー |
|
提出日時 | 2023-07-24 12:10:39 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 31 ms / 2,000 ms |
コード長 | 1,718 bytes |
コンパイル時間 | 1,110 ms |
コンパイル使用メモリ | 111,872 KB |
最終ジャッジ日時 | 2025-02-15 18:44:15 |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 28 |
ソースコード
/*真ん中二つをきめる際に全探索のこりは二分探索AC*/#include<iostream>#include<set>#include<algorithm>#include<vector>#include<string>#include<set>#include<map>#include<numeric>#include<queue>#include<cmath>#include<random>#include<bitset>//#include<fstream>using namespace std;typedef long long ll;const ll INF=1LL<<60;typedef pair<ll,ll> P;typedef pair<int,P> PP;const ll MOD=998244353;int main(){int N;cin>>N;vector<ll> A(N);vector<vector<int>> idx(2000+1);for(int i=0;i<N;i++){cin>>A[i];idx[A[i]].push_back(i);}ll cnt=0;for(int i=0;i<N;i++){for(int j=i+1;j<N;j++){//a[2]=A[i]とa[3]=A[j]と固定//int a2=A[i];int a3=A[j];int k=a2-a3;if(k<=0) continue;int a1=a2-(k+10);int a4=a3+(k+1);if(a1<1 || 2000<a4) continue;//[ begin, it)auto it=lower_bound(idx[a1].begin(),idx[a1].end(),i);ll c1= it -idx[a1].begin();//[it,end)ll c2=idx[a4].end() - upper_bound(idx[a4].begin(),idx[a4].end(),j);cnt+=c1*c2;}}/*auto check=[&](int idx){if(idx+3>=N) return false;ll k=A[idx+1]-(A[idx]+10);//if(A[idx+2]==A[idx]+10 && A[idx+3]==A[idx]+11+k){if(A[idx+2]==A[idx+1]-k && A[idx+3]==A[idx+2]+1+k){return true;}else{return false;}};int cnt=0;for(int i=0;i<N;i++){if(check(i)){cnt++;}}*/cout<<cnt<<endl;}