Good Pairs-Codeforces

投稿日: 更新日:

問題リンク-Good Pairs

問題

整数列a1,a2,...,ana_1, a_2, ...,a_nが与えられます。1kn1 \leqq k \leqq nkkに足して以下の等式を満たすペア(i,j),1i,jn(i, j),1 \leqq i,j \leqq nを1つ見つけてください。

aiak+akaj=aiaj|a_i - a_k| + |a_k - a_j| = |a_i - a_j|

解法

数列中の最大値をamaxa_{\max}、最小値をamina_{\min}とします。
ai=amaxa_i = a_{\max}aj=amina_j = a_{\min}と条件を満たします。

amaxak+akamin=amaxaminamaxak+akamin=amaxaminamaxamin=amaxamin\begin{aligned} |a_{\max} - a_k| + |a_k - a_{\min}| &= |a_{\max} - a_{\min}|\\ a_{\max} - a_k + a_k - a_{\min} &= a_{\max} - a_{\min}\\ a_{\max} - a_{\min} &= a_{\max} - a_{\min} \end{aligned}

実装

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

void solve(){
    int n;
    cin >> n;
    vector<pair<int, int>> a(n);
    for(int i = 0;i < n; ++i){
        cin >> a[i].first;
        a[i].second = i+1;
    }

    sort(a.begin(), a.end());
    cout << a[0].second << " " << a[n-1].second << endl;
}

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

書いた人

profile_image

お茶の葉

物理とプログラミングが好きな人