結果
| 問題 | 
                            No.2519 Coins in Array
                             | 
                    
| コンテスト | |
| ユーザー | 
                             MasKoaTS
                         | 
                    
| 提出日時 | 2023-09-03 14:51:14 | 
| 言語 | C++17  (gcc 13.3.0 + boost 1.87.0)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 341 ms / 2,000 ms | 
| コード長 | 1,064 bytes | 
| コンパイル時間 | 2,089 ms | 
| コンパイル使用メモリ | 200,916 KB | 
| 最終ジャッジ日時 | 2025-02-16 18:24:36 | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge2 / judge1 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| 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(n - 1, pair<int, int>({}));
    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[0] = {1, 2};  ops[1] = {1, 2};  ops[2] = {n - 3, n - 2};
        for(int i = n - 3; i > 1; --i){
            ops[n - i] = {1, i};
        }
    }
    cout << ans << endl;
    for(auto&[x, y] : ops){
        cout << x << ' ' << y << endl;
    }
    return 0;
}
            
            
            
        
            
MasKoaTS