結果
| 問題 |
No.1120 Strange Teacher
|
| コンテスト | |
| ユーザー |
soto800
|
| 提出日時 | 2020-07-22 21:39:24 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 77 ms / 1,000 ms |
| コード長 | 2,036 bytes |
| コンパイル時間 | 1,951 ms |
| コンパイル使用メモリ | 178,552 KB |
| 実行使用メモリ | 8,064 KB |
| 最終ジャッジ日時 | 2024-06-22 14:39:13 |
| 合計ジャッジ時間 | 4,551 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 27 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define lli long long int
#define REP(i,s,n) for(lli i=s;i<n;i++)
#define NUM 2520
#define INF (1LL<<50)
#define DEBUG 0
#define mp(a,b) make_pair(a,b)
#define SORT(V) sort(V.begin(),V.end())
#define PI (3.141592653589794)
#define TO_STRING(VariableName) # VariableName
#define LOG(x) if(DEBUG)cout<<TO_STRING(x)<<"="<<x<<" "<<endl;
#define LOG2(x,y) if(DEBUG)cout<<TO_STRING(x)<<"="<<x<<" "<<TO_STRING(y)<<"="<<y<<endl;
#define LOG3(x,y,z) if(DEBUG)cout<<TO_STRING(x)<<"="<<x<<" "<<TO_STRING(y)<<"="<<y<<" "<<TO_STRING(z)<<"="<<z<<endl;
#define LOG4(w,x,y,z) if(DEBUG)cout<<TO_STRING(w)<<"="<<w<<" "<<TO_STRING(x)<<"="<<x<<" "<<TO_STRING(y)<<"="<<y<<" "<<TO_STRING(z)<<"="<<z<<endl;
template<class T>bool chmax(T & a, const T & b) { if (a < b) { a = b; return 1; } return 0; }
template<class T>bool chmin(T& a, const T& b) { if (b < a) { a = b; return 1; } return 0; }
void solve(){
lli n;
cin>>n;
vector<lli> a(n),b(n);
vector<lli> c(n);
vector<pair<lli,pair<lli,lli>>> v(n);
lli sumA=0,sumB=0;
REP(i,0,n){
cin>>a[i];
sumA+=a[i];
}
REP(i,0,n){
cin>>b[i];
sumB+=b[i];
}
REP(i,0,n){
v[i]={a[i]-b[i],{a[i],b[i]}};
}
SORT(v);
if(n==2){
lli sumA=0,sumB=0;
REP(i,0,n){
sumA+=a[i];
sumB+=b[i];
}
if(sumA==sumB){
cout<<abs(a[0]-b[0])<<endl;
}
else{
cout<<-1<<endl;
}
return;
}
bool ok = true;
REP(i,0,n){
if(a[i]!=b[i]){
ok = false;
break;
}
}
if(ok){
cout<<0<<endl;
return;
}
lli diff = sumA-sumB;
if(diff%(n-2)!=0){
cout<<-1<<endl;
return;
}
lli ans = diff/(n-2);
lli lef = ans;
LOG(ans);
REP(i,0,n){
lli use = ans-(v[i].second.first-v[i].second.second);
if(use%2!=0){
cout<<-1<<endl;
return;
}
use/=2;
LOG4(i,a[i],b[i],use);
lef -= use;
if(lef<0){
cout<<-1<<endl;
return;
}
}
if(lef!=0){
cout<<-1<<endl;
}
else{
cout<<ans<<endl;
}
}
int main(){
// cout << fixed << setprecision(5);
lli t=1;
//cin>>t;
while(t--)solve();
return 0;
}
soto800