結果
| 問題 |
No.2114 01 Matching
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-10-28 22:16:05 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,188 bytes |
| コンパイル時間 | 1,686 ms |
| コンパイル使用メモリ | 116,184 KB |
| 実行使用メモリ | 135,276 KB |
| 最終ジャッジ日時 | 2024-07-06 01:26:36 |
| 合計ジャッジ時間 | 9,501 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | TLE * 1 -- * 50 |
コンパイルメッセージ
main.cpp:9:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
9 | main()
| ^~~~
ソースコード
#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
#include<atcoder/mincostflow>
using namespace std;
int N,M,K;
map<int,vector<pair<int,int> > >mp;
main()
{
cin>>N>>M>>K;
vector<int>vs;
for(int i=0;i<N+M;i++)
{
int A;cin>>A;
mp[A%K].push_back(make_pair(A,i));
vs.push_back(A);
}
sort(vs.begin(),vs.end());
vs.erase(unique(vs.begin(),vs.end()),vs.end());
auto id=[&vs](int x){return lower_bound(vs.begin(),vs.end(),x)-vs.begin();};
atcoder::mcf_graph<int,int>mf(vs.size()+2);
int source=vs.size(),sink=source+1;
for(auto it=mp.begin();it!=mp.end();it++)
{
vector<pair<int,int> >now;
now.swap(it->second);
sort(now.begin(),now.end());
for(int i=0;i<now.size();i++)
{
int u=id(now[i].first);
if(now[i].second<N)mf.add_edge(source,u,1,0);
else mf.add_edge(u,sink,1,0);
now[i].second=u;
}
for(int i=1;i<now.size();i++)if(now[i-1].first<now[i].first)
{
int u=now[i-1].second,v=now[i].second;
mf.add_edge(u,v,1e9,(now[i].first-now[i-1].first)/K);
mf.add_edge(v,u,1e9,(now[i].first-now[i-1].first)/K);
}
}
pair<int,int>ans=mf.flow(source,sink);
if(ans.first==min(N,M))cout<<ans.second<<endl;
else cout<<-1<<endl;
}