imomoの勉強記録

主に勉強の記録などを残していきます

NOMURA プログラミングコンテスト 2020に参加しました

AtCoderのコンテストに参加した際の結果と考え方、反省点などを書いていきます。
コンテストページはこちら

解いた/挑んだ問題

A問題

問題の概要

高橋君はH_1時M_1秒に起きてH_2時M_2分に寝ます
起きている時間の中から勉強する時間(K分)を引いたら何分か出力せよ

制約
  • 0 \leq H_1,H_2 \leq 23
  • 0 \leq M_1,M_2 \leq 59
  • H_1時M_1分はH_2時M_2分より前の時刻である
  • K \geq 1
  • 高橋君が起きている時間の長さはK分以上である
  • 入力はすべて整数である
どのように考えたか

出力単位が分のみなので、起きている時刻を分に直して、Kを引いて出力

結果

一発AC
・提出ししたコード

#include"bits/stdc++.h"

#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define REP(i, n) for (int i = 1; i <= (int)(n); i++)
using namespace std;
using ll = long long;
using pi = pair<int, int>;
const ll INF = 1LL << 60;


int main() {
    int h, m, hh, mm, k,ans;
    cin >> h >> m >> hh >> mm >> k;
    ans = (hh * 60 + mm) - (h * 60 + m);
    ans -= k;
    cout << ans << endl;
    return 0;
}

最初はM_2がM_1より小さかったら繰り下げ考慮の必要があって面倒だと思っていたら分に直したら解決してよかった

ACまでの時間

ACしたのはコンテスト開始から3分後です。

f:id:iiiimmmmo:20200530222557p:plain
nomura_a

B問題

問題の概要

'D'、'P'及び'?'からなる文字列Tが与えられます。
'?'をいずれかの文字に置き換え、Tの'D'及び'PD'の出現回数が最大になるとき、出現回数を出力せよ

制約
  • 1 \leq |T| \leq 2 ×10^5
  • Tは'P','D','?'からなる
どのように考えたか

PもPDも点数が変わらないので?に全部Dを入れたものの出現回数でいいんじゃないかと思った

結果

一発AC
提出したコード

#include"bits/stdc++.h"

#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define REP(i, n) for (int i = 1; i <= (int)(n); i++)
using namespace std;
using ll = long long;
using pi = pair<int, int>;
const ll INF = 1LL << 60;


int main() {
    string t;
    cin >> t;
    rep(i, t.size()) {
        if (t[i] == '?')t[i] = 'D';
    }
    cout << t << endl;
    return 0;
}

あまり深く考えずに解けてよかった

ACまでの時間

ACしたのはコンテスト開始から7分弱です。

f:id:iiiimmmmo:20200530223613p:plain
nomura_b

結果

コンテスト結果

ABの2完でした。
Cからとても難しく、解こうとは思ったが解けなかった

f:id:iiiimmmmo:20200530223712p:plain
nomura

順位、パフォーマンス変動

順位は前回より7000近く上がり2094位、レーティングは491となりました。

f:id:iiiimmmmo:20200530233313p:plain
コンテスト成績表

f:id:iiiimmmmo:20200530233641p:plain
NOMURA2020コンテストを終えてのレーティング

反省点

今回は俗にいうAB早解きコンテストだったので早解きでレーティングが茶色に戻りましたが、次回からは普通のABCなので、きちんと取り組んでいきたいです。