結果
問題 | No.1597 Matrix Sort |
ユーザー | yunix91201367 |
提出日時 | 2021-07-09 22:17:53 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 359 ms / 1,500 ms |
コード長 | 1,300 bytes |
コンパイル時間 | 1,684 ms |
コンパイル使用メモリ | 169,484 KB |
実行使用メモリ | 82,944 KB |
最終ジャッジ日時 | 2024-07-01 16:53:45 |
合計ジャッジ時間 | 8,243 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 27 |
ソースコード
#include <bits/stdc++.h> using namespace std; #define int long long using vec_int = vector<int>; // using P = pair<int,int>; using ll = long long; #define rep(i, n) for(int i = 0; i < (int)(n); i++) int calc(vec_int &imos, int left, int right){ if(left==0)return imos.at(right); return imos.at(right)-imos.at(left-1); } int count(vec_int &A, vec_int &imos, int mid, int P){ int num = 0; int N = A.size(); for(int i=0;i<N;i++){ int left = (P-A.at(i))%P; int right = (P+mid-A.at(i))%P; if(left<=right){ num += calc(imos, left, right); }else{ num += calc(imos, left, P-1); num += calc(imos, 0, right); } } return num; } signed main(){ int N, K, P; cin>>N>>K>>P; vec_int A(N), B(N); rep(i,N)cin>>A.at(i); rep(i,N)cin>>B.at(i); vec_int imos(P, 0); rep(i,N){ imos.at(B.at(i))++; } for(int i=1;i<P;i++)imos.at(i) += imos.at(i-1); int left = -1; //K以下値 int right = P-1; //K番目より大きい値 while(right>left+1){ int mid = (right+left)/2; int num = count(A, imos, mid, P); if(num<K){ left = mid; }else{ right = mid; } } cout<<right<<endl; return 0; }