結果
| 問題 | 
                            No.2519 Coins in Array
                             | 
                    
| コンテスト | |
| ユーザー | 
                             MasKoaTS
                         | 
                    
| 提出日時 | 2023-09-03 14:48:29 | 
| 言語 | C++17  (gcc 13.3.0 + boost 1.87.0)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 304 ms / 2,000 ms | 
| コード長 | 1,029 bytes | 
| コンパイル時間 | 1,845 ms | 
| コンパイル使用メモリ | 201,648 KB | 
| 最終ジャッジ日時 | 2025-02-16 18:24:23 | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge2 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 4 | 
| other | AC * 37 | 
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ll f(ll x, ll y) {
	return (gcd(x, y) == 1) ? (x - 1) * (y - 1) : 0;
}
int main(){
    int n;  cin >> n;
    vector<ll> a(n);
    for(auto& x : a){
        cin >> x;
    }
    
    ll ans = 0;
    vector<pair<int, int> > ops = {};
    if(n == 2){
        ans = f(a[0], a[1]);
        ops = { {1, 2} };
    }
    else if(n == 3){
        ans = f(f(a[0], a[1]), a[2]);
        ops = { {1, 2}, {1, 2} };
        ll t = f(f(a[0], a[2]), a[1]);
        if(t < ans){
            ans = t;
            ops = { {1, 3}, {1, 2} };
        } 
        t = f(f(a[1], a[2]), a[0]);
        if(t < ans){
            ans = t;
            ops = { {2, 3}, {1, 2} };
        }       
    }
    else{
        ans = 0;
        ops = { {1, 2}, {1, 2}, {n - 3, n - 2} };
        for(int i = n - 3; i > 1; --i){
            ops.push_back({1, i});
        }
    }
    cout << ans << endl;
    for(auto&[x, y] : ops){
        cout << x << ' ' << y << endl;
    }
    
    return 0;
}
            
            
            
        
            
MasKoaTS