AtCoder Beginner Contest 244

## [A - Last Letter](https://atcoder.jp/contests/abc244/tasks/abc244_a)

O(1)
A問題は、簡単になりましたね。
N-1のindexの文字を表示。

```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 N;
    string s;
    cin >> N >> s;
    cout << s[N-1] << endl;

    return 0;
} 
```

残り９８分

## [B - Go Straight and Turn Right](https://atcoder.jp/contests/abc244/tasks/abc244_b)

O(N)
方角を保持する変数（cnt）と、移動する方角での移動距離を表す配列(X, Y)を用意。

```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 X[4] = {1, 0, -1, 0};
int Y[4] = {0, -1, 0, 1};
 
int main() {
    int N;
    string t;
    cin >> N >> t;
 
    int cnt=0, x=0, y=0;
    rep(i, N){
        if(t[i] == 'S'){
            x += X[cnt];
            y += Y[cnt];
        }else{
            cnt++;
            if(cnt>=4) cnt=0;
        }
    }
    cout << x << ' ' << y << endl;
 
    return 0;
}
```

残り９3分

## [トイレ休憩]
ここで腹痛という不運が襲う。

残り８８分

## [C - Yamanote Line Game](https://atcoder.jp/contests/abc244/tasks/abc244_c)

O(N)
「この問題はインタラクティブな問題」とのこと。
初めて見ましたが、簡単なコンソールゲームですね。

１、setに必要な要素を全て追加。
２、whileにて終了条件をsetのsizeにする
3、先頭の要素を出力、削除
４、対戦相手の入力を受け取る、削除
5、0を受け取る

```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 N;
    set<int> st;
    cin >> N;
    rep(i, 2*N+1) st.insert(i+1);
 
    while(st.size()>0){
        int s =  *st.begin();
        cout << s << endl;
        st.erase(s);
        int t;
        cin >> t;
        st.erase(t);
    }
    int e;
    cin >> e;
 
    return 0;
} 
```

残り80分

## [D - Swap Hats](https://atcoder.jp/contests/abc244/tasks/abc244_d)

O(3)
10^18はシミュレートできない制約です。
つまり規則性を見つける必要があります。

１、10^18ということは交換終了時は偶数回の交換が行われたパターンである。
２、RGBの全ての色が存在しているので、SiとTiの異なる組み合わせの数は０、２、３のみ出現する
３、異なる組み合わせの数が２の場合、奇数回の交換でしかSiとTiを一致させることはできない

０と３のパターンがYes。
２のパターンはNoです。

```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() {
    string s = "RRR";
    string t = "TTT";

    rep(i, 3) cin >> s[i];
    rep(i, 3) cin >> t[i];

    int cnt=0;
    rep(i, 3) if(s[i] != t[i]) cnt++;

    if(cnt==3 || cnt==0) cout << "Yes" << endl;
    else cout << "No" << endl;

    return 0;
}  
```

残り７０分