結果

問題 No.3436 [Cherry 8th Tune B] この夏に何が起こるかな?
コンテスト
ユーザー tau1235
提出日時 2026-01-23 22:10:07
言語 C++23
(gcc 15.2.0 + boost 1.89.0)
結果
RE  
実行時間 -
コード長 1,960 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 6,010 ms
コンパイル使用メモリ 370,952 KB
実行使用メモリ 7,852 KB
最終ジャッジ日時 2026-01-23 22:11:02
合計ジャッジ時間 21,874 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other WA * 1 RE * 9 TLE * 1 -- * 32
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include<bits/stdc++.h>
using namespace std;

void solve(){
  using ll=long long;
  ll n,m,k,p;
  cin>>n>>m>>k>>p;
  vector<ll> t(n),c(n),b(m),d(m),s(k);
  vector<vector<ll>> g(k),g2(k);
  vector<vector<pair<ll,ll>>> vp(k);
  map<pair<ll,ll>,int> mp2;
  for (int i=0;i<n;i++) cin>>t[i];
  for (int i=0;i<n;i++){
    cin>>c[i],g2[--c[i]].push_back(t[i]);
    mp2[{c[i],t[i]}]=i;
  }
  for (int i=0;i<m;i++) cin>>b[i];
  for (int i=0;i<m;i++){
    cin>>d[i];
    g[--d[i]].push_back(b[i]);
    vp[d[i]].push_back({b[i],i});
  }
  for (int i=0;i<k;i++) cin>>s[i];
  auto b2=b;
  sort(b2.begin(),b2.end());
  for (int i=0;i<k;i++) sort(g.begin(),g.end());
  ll l=-3e9,r=3e9;
  while (r-l>1){
    ll mid=(l+r)/2;
    ll cnt=0;
    for (int i=0;i<n;i++){
      cnt+=upper_bound(g[c[i]].begin(),g[c[i]].end(),mid+s[c[i]]-t[i])-g[c[i]].begin();
      cnt-=upper_bound(g[c[i]].begin(),g[c[i]].end(),mid-t[i])-g[c[i]].begin();
      cnt+=upper_bound(b2.begin(),b2.end(),mid-t[i])-b2.begin();
    }
    if (cnt>=p) r=mid;
    else l=mid;
  }
  map<ll,int> mp;
  for (int i=0;i<k;i++){
    for (ll val:g2[i]){
      if (mp.count(r-val)){
        cout<<mp2[{i,val}]+1<<" "<<mp[r-val]+1<<endl;
        return;
      }
    }
    map<ll,int> mp3;
    for (auto [val,idx]:vp[i]){
      mp[val]=idx;
      mp3[val]=idx;
    }
    for (ll val:g2[i]){
      if (mp3.count(r-val+s[i])){
        cout<<mp2[{i,val}]+1<<" "<<mp3[r-val+s[i]]+1<<endl;
        return;
      }
    }
  }
  mp.clear();
  for (int i=k-1;i>=0;i--){
    for (ll val:g2[i]){
      if (mp.count(r-val)){
        cout<<mp2[{i,val}]+1<<" "<<mp[r-val]+1<<endl;
        return;
      }
    }
    map<ll,int> mp3;
    for (auto [val,idx]:vp[i]){
      mp[val]=idx;
      mp3[val]=idx;
    }
    for (ll val:g2[i]){
      if (mp3.count(r-val+s[i])){
        cout<<mp2[{i,val}]+1<<" "<<mp3[r-val+s[i]]+1<<endl;
        return;
      }
    }
  }
  assert(0);
}

int main(){
  int t;
  cin>>t;
  while (t--) solve();
}
0