AtCoder Beginner Contest 262

## [A - World Cup](https://atcoder.jp/contests/abc262/tasks/abc262_a)

O(N)
シミュレートします。

```C++:C++
#include <bits/stdc++.h>
 
#define rep(i,n) for(int i=0; i<(n); ++i)
#define repx(i,x,n) for(int i=x; i<(n); ++i)
#define fixed_setprecision(n) fixed << setprecision((n))
#define execution_time(ti) printf("Execution Time: %.4lf sec\n", 1.0 * (clock() - ti) / CLOCKS_PER_SEC);
#define pai 3.1415926535897932384
#define NUM_MAX 2e18
#define NUM_MIN -1e9
 
using namespace std;
using ll = long long;
using P = pair<int,int>;
template<class T> inline bool chmax(T& a, T b){ if(a<b){ a=b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b){ if(a>b){ a=b; return 1; } return 0; }

int main() {
    int Y;
    cin >> Y;

    rep(i, 4){
        if((Y + i) % 4 == 2){
            cout << Y + i << endl;
            break;
        }
    }

    return 0;
} 
```

## [B - Triangle (Easier)](https://atcoder.jp/contests/abc262/tasks/abc262_b)

O(N^3)
グラフを作成してシミュレートします。

```C++:C++
#include <bits/stdc++.h>
 
#define rep(i,n) for(int i=0; i<(n); ++i)
#define repx(i,x,n) for(int i=x; i<(n); ++i)
#define fixed_setprecision(n) fixed << setprecision((n))
#define execution_time(ti) printf("Execution Time: %.4lf sec\n", 1.0 * (clock() - ti) / CLOCKS_PER_SEC);
#define pai 3.1415926535897932384
#define NUM_MAX 2e18
#define NUM_MIN -1e9
 
using namespace std;
using ll = long long;
using P = pair<int,int>;
template<class T> inline bool chmax(T& a, T b){ if(a<b){ a=b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b){ if(a>b){ a=b; return 1; } return 0; }

int graph[101][101];

int main() {
    int N, M;
    cin >> N >> M;

    rep(i, M){
        int u, v;
        cin >> u >> v;
        graph[u][v] = 1;
        graph[v][u] = 1;
    }

    int ans=0;
    repx(a, 1, N+1){
        repx(b, a+1, N+1){
            repx(c, b+1, N+1){
                if(graph[a][b] && graph[b][c] && graph[c][a]){
                    ans++;
                }
            }
        }
    }
    cout << ans << endl;

    return 0;
} 
```

## [C - Min Max Pair](https://atcoder.jp/contests/abc262/tasks/abc262_c)

O(N)
組み合わせの問題です。
インデックスと配列の要素の数字が等しい物の数sumは、以下の組み合わせ数になります。

```
組み合わせの数 = _{sum}C_{2}
```

インデックスAと配列の要素の数字Aが等しくない場合、
要素の数字Aを配列のインデックスBとして、
インデックスBの配列の要素がインデックスAと等しいか比較します。
等しい場合、＋１を行います。

```C++:C++
#include <bits/stdc++.h>
 
#define rep(i,n) for(int i=0; i<(n); ++i)
#define repx(i,x,n) for(int i=x; i<(n); ++i)
#define fixed_setprecision(n) fixed << setprecision((n))
#define execution_time(ti) printf("Execution Time: %.4lf sec\n", 1.0 * (clock() - ti) / CLOCKS_PER_SEC);
#define pai 3.1415926535897932384
#define NUM_MAX 2e18
#define NUM_MIN -1e9
 
using namespace std;
using ll = long long;
using P = pair<int,int>;
template<class T> inline bool chmax(T& a, T b){ if(a<b){ a=b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b){ if(a>b){ a=b; return 1; } return 0; }

// nCr を定義通りに求める関数
long long nCr(long long n, long long r) {
	long long nPr = 1;
	for(long long i = 0; i < r; ++i) {
		nPr *= (n - i);
	}

	long long fact_r = 1;
	for(long long i = 1; i <= r; ++i) {
		fact_r *= i;
	}

	long long ret = nPr / fact_r;
	return ret;
}

int main() {
    ll N, sum=0;
    cin >> N;
    vector<ll> A(N+1);
    rep(i, N){
        ll v;
        cin >> v;
        A[i+1] = v;
        if(i+1 == v) sum++;
    }

    ll ans=0;
    for(int i=1; i<A.size(); i++){
        if(A[i] != i){
            int t = A[i];
            if(A[t] == i) ans++;
        }
    }
    ans /= 2;
    ans += nCr(sum, 2);
    cout << ans << endl;

    return 0;
} 
```