AtCoder 生活　16日目

#16日目
今回は、A問題を5問、B問題を5問、C問題を4問,D問題を1問解きました
そしてABC161にも参加しました。

|問題番号|難易度|自力で解けた|かかった時間|
|---|:-:|:-:|---|---|
|ABC139|A|◯|3分34秒|
|ABC140|A|◯|2分47秒|
|ABC141|A|◯|3分56秒|
|ABC142|A|◯|13分57秒|
|ABC143|A|◯|3分31秒|
|ABC142|B|◯|8分16秒|
|ABC143|B|◯|7分59秒|
|ABC144|B|◯|8分|
|ABC145|B|◯|15分8秒|
|ABC146|B|◯|12分52秒|
|ABC149|C|✕|38分58秒|
|ABC150|C|✕|31分55秒|
|ABC151|C|✕|46分12秒|
|ABC152|C|✕|55分11秒|
|ABC160|D|✕|72分21秒|


## ABC139_A

問題:[Tenki]
(https://atcoder.jp/contests/abc139/tasks/abc139_a)


```c++

#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
using namespace std;

int main(){
    string s,t;
    cin >> s >> t;
    int res = 0;
    rep(i,3){
        if(s[i] == t[i]) res++;
    }
    cout << res << endl;
}

```

解くのにかかった時間：3分34秒


## ABC140_A

問題:[Password]
(https://atcoder.jp/contests/abc140/tasks/abc140_a)


```c++

#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
using namespace std;

int main(){
    int n;
    cin >> n;
    cout << n*n*n << endl;
}

```

解くのにかかった時間：2分47秒


## ABC141_A

問題:[Weather Prediction]
(https://atcoder.jp/contests/abc141/tasks/abc141_a)


```c++

#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
using namespace std;

int main(){
    string s;
    cin >> s;
    if(s == "Sunny"){
        cout << "Cloudy" << endl;
        return 0;
    }
    else if(s == "Cloudy"){
        cout << "Rainy" << endl;
        return 0;
    }
    else if(s == "Rainy"){
        cout << "Sunny" << endl;
        return 0;
    }
}

```

解くのにかかった時間：3分56秒


## ABC142_A

問題:[Odds of Oddness]
(https://atcoder.jp/contests/abc142/tasks/abc142_a)


```c++

#include <bits/stdc++.h>
#define rep(i,n) for(int i = 1;i <= (n);i++)
using namespace std;

int main(){
    double n;
    cin >> n;
    int res = 0;
    rep(i,n){
        if(i % 2 == 1) res++;
    }
    cout << fixed << setprecision(6) << res/n << endl;
}


```

解くのにかかった時間：13分57秒


## ABC142_B

問題:[Roller Coaster]
(https://atcoder.jp/contests/abc142/tasks/abc142_b)


```c++

#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
using namespace std;

int main(){
    int n,k;
    cin >> n >> k;
    vector<int> h(i);
    rep(i,n){
        cin　>> h[i];
    }
    int res = 0;
    rep(i,n){
        if(h[i] >= k) res++;
    }
    cout << res << endl;
}

```

解くのにかかった時間：8分16秒
感想：最近のB問題はA問題と大差ない気がする


## ABC143_A

問題:[Curtain]
(https://atcoder.jp/contests/abc143/tasks/abc143_a)


```c++

#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
using namespace std;

int main(){
    int a,b;
    cin >> a >> b;
    if(a >= b*2) cout << a - b*2 << endl;
  	else cout << 0 << endl;
}

```

解くのにかかった時間：3分31秒


## ABC143_B

問題:[TAKOYAKI FESTIVAL 2019]
(https://atcoder.jp/contests/abc143/tasks/abc143_b)


```c++

;#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
using namespace std;

int main(){
    int n;
    cin >> n;
    vector<int> d(n);
    rep(i,n) cin >> d[i];
    int sum = 0;
    rep(i,n){
        rep(j,n){
            if(i != j) sum += d[i] * d[j];
        }
    }
    cout << sum/2 << endl;
}

```

解くのにかかった時間：7分59秒


## ABC144_B

問題:[81]
(https://atcoder.jp/contests/abc144/tasks/abc144_b)


```c++

#include <bits/stdc++.h>
#define rep(i,n) for(int i = 1;i <= (n);i++)
using namespace std;

int main(){
    int n;
  	cin >> n;
    rep(i,9){
        rep(j,9){
            if(n == i*j){
                cout << "Yes" << endl;
                return 0;
            }
        }
    }
    cout << "No" << endl;
}

```

解くのにかかった時間：8分


## ABC145_B

問題:[Echo]
(https://atcoder.jp/contests/abc145/tasks/abc145_b)


```c++

#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
using namespace std;

int main(){
    int n;
    string s;
    cin >> n >> s;
    if(n%2 == 0){
        string t = s.substr(0,n/2);
        if(s == t+t){
            cout << "Yes" << endl;
            return 0;
        }
    }
    cout << "No" << endl;
}

```

解くのにかかった時間：15分8秒


## ABC146_B

問題:[ROT N]
(https://atcoder.jp/contests/abc146/tasks/abc146_b)


```c++

#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
using namespace std;

int main(){
    int n;
    string s;
    cin >> n >> s;
    string alp = {ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ};
    string ans = "";
    rep(i,s.size()){
        rep(j,26){
            if(s[i] == alp[j]) ans += alp[j+N];
        }
    }
    cout << ans << endl;
}

```

解くのにかかった時間：12分52秒
感想：ゴリ押し


## ABC149_C

問題:[Next Prime]
(https://atcoder.jp/contests/abc149/tasks/abc149_c)


```c++

#include <bits/stdc++.h>
#define rep(i,n) for(int i = 2;i < (n);i++)
using namespace std;

int main(){
    int x;
    cin >> x;
    while(1){
        bool ok = true;
        rep(i,x){
            if(x%i == 0){
                ok = false;
            }
        }
        if(ok) break;
        x++;
    }
    cout << x << endl;
}

```

解くのにかかった時間：38分58秒
感想：while(1)のかたちにして回していくことが思いつかなかった。


## ABC150_C

問題:[Count Order]
(https://atcoder.jp/contests/abc150/tasks/abc150_c)


```c++

#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
using namespace std;

int main(){
    int n;
    cin >> n;
    vector<int> p(n),q(n);
    rep(i,n) cin >> p[i];
    rep(i,n) cin >> q[i];
    vector<int> a(n);
    rep(i,n) a[i] =i+1;

    map <vector<int>,int> mp;
    do{
        mp[a] = mp.size();
    } while (next_permutation(a.begin(),a.end()));

    int ans = abs(mp[p] - mp[q]);
    cout << ans << endl;
}
```

解くのにかかった時間：31分55秒
感想：next_permutationというものを今回はじめて知りました。


## ABC151_C

問題:[Welcome to AtCoder]
(https://atcoder.jp/contests/abc151/tasks/abc151_c)


```c++

#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
using namespace std;

int main(){
    int n,m;
    cin >> n >> m;
    vector<int> ac(n), pena(n);
    rep(i,m){
        int p;
        string q;
        cin >> p >> q;
        p--;
        if (ac[p]) continue;
        if (q == "AC"){
            ac[p] = 1;
        }
        else {
            pena[p]++;
        }
    }
    int AC = 0 , PENA = 0;
    rep(i,n){
        AC += ac[i];
        if (ac[i]) PENA += pena[i];
    }
    cout << AC << " " << PENA << endl;
}


```

解くのにかかった時間：46分12秒
感想：continueの使い方にまだなれていない感じがする。


## ABC152_C

問題:[Low Elements]
(https://atcoder.jp/contests/abc152/tasks/abc152_c)


```c++

#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
using namespace std;

int main() {
  	int n;
  	cin >> n;
  	vector<int> p(n);
  	rep(i,n) cin >> p[i];
  	int ans = 0;
  	int curMin = 1e9;
  	rep(i,n) {
    	curMin = min(curMin, p[i]);
    	if (curMin == p[i]) ans++;
  	}
  	cout << ans << endl;
  	return 0;
}

```

解くのにかかった時間：55分11秒
感想：問題文を理解できていなかった


## ABC160_D

問題:[Line++]
(https://atcoder.jp/contests/abc160/tasks/abc160_d)


```c++

#include <bits/stdc++.h>
#define rep(i,n) for (int i = 0; i < (n); ++i)
using namespace std;

const int INF = 1001001001;

int main() {
    int n, x, y;
    cin >> n >> x >> y;
    x--;
    y--;
    vector<int> ans(n);
    rep(sv,n) {
        vector<int> dist(n, INF);
        queue<int> q;
        auto push = [&](int v, int d) {
            if (dist[v] != INF) return;
            dist[v] = d;
            q.push(v);
        };
        push(sv, 0);
        while (!q.empty()) {
            int v = q.front(); q.pop();
            int d = dist[v];
            if (v-1 >= 0) push(v-1, d+1);
            if (v+1 < n) push(v+1, d+1);
            if (v == x) push(y, d+1);
            if (v == y) push(x, d+1);
        }
        rep(i,n) ans[dist[i]]++;
    }
    rep(i,n) ans[i] /= 2;
    for (int i = 1; i <= n-1; ++i) {
        cout << ans[i] << endl;
    }
    return 0;
}

```

解くのにかかった時間：72分21秒
感想：BFSについてそもそも知らなかったので、これから勉強していきたい。


##ABC161

![スクリーンショット 2020-04-04 22.41.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606053/4d8c62d6-34b4-262c-8696-d87eb27cbe41.png)


###A

```c++

#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
using namespace std;

int main(){
    int x,y,z;
    cin >> x >> y >> z;
    int a = x,b = y,c = z;
    swap(a,b);
    swap(a,c)
    cout << a << " " << b << " " << c << endl;

}

```

###B

```c++

#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
using namespace std;

int main(){
    int n,m;
    cin >> n >> m;
    vector<int> a(n);
    rep(i,n) cin >> a[i];
    int64_t sum = 0;
    rep(i,n){
        sum += a[i];
    }
    int res = 0;
    rep(i,n){
        if(sum%(4*m) == 0){
            if(a[i] >= sum/(4*m)){
                res++;
        	}
        }
        else{
            if(a[i] >= sum/(4*m)+1){
                res++;
        	}
        }
    }
    if(res >= m) cout << "Yes" << endl;
    else cout << "No" << endl;
}

```


###最後に
A問題は平均5分14秒、B問題は平均10分27秒で解き終わりました。
C問題はまだ問題数もやっていないのであと数日は解くのにかかる気がしますがやっていきたいです。
ただ、D問題に関しては圧倒的知識不足を感じるので蟻本などを用いて今後勉強していきたいと思います。
ABC161を解いて、C問題を改めて解けるようになりたいと思いました。

|難易度|かかった平均時間|解けた問題数|
|:-:|---|---|
|A|5分14秒|5問中5問|
|B|10分27秒|5問中5問|