imomoの勉強記録

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

ARC109に参加しました

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

解いた/挑んだ問題

A問題

問題の概要

100階建ての建物ABがあり、建物AとBはi階同士、またはAのi+1階とBのi階が廊下で繋がっておりx分で移動できる
また、同じ建物には階段があり同じ建物を1階毎にy分で移動できる
Aのa階からBのb階まで移動するとき、最短で何分で移動できるか求めよ

制約
  • 1 \leq a,b,x,y \leq 100
  • 入力はすべて整数
どのように考えたか

a階からb階への移動する階で分け、a階とb階が同じ階か、a階が一つ上の階の時のみ廊下で移動
それ以外は廊下移動の時のみと階段移動も含めた移動時間の最小値をとった

結果

5回目でようやくAC
・提出ししたコード

#include<bits/stdc++.h>
#include<atcoder/all>

#define rep(i, n) for (long long i = 0; i < (long long)(n); i++)
#define REP(i, n) for (long long i = 1; i <= (long long)(n); i++)
#define FOR(i,x,n,r) for(long long i = x; i< (long long)(n); i+=r)
#define afor(a,t) for(auto a:t)
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
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; }
using namespace std;
using namespace atcoder;
using ll = long long;
using pi = pair<int, int>;
ll pows(ll x, ll n) {ll ret = 1;while (n > 0) {if (n & 1) ret *= x;x *= x;n >>= 1;}return ret;}

int main() {
	int a,b,x,y,ans;
	cin >> a >>b >> x >>y;
	int res = a-b;
	if(res < 0){
		ans = (((abs(res)+1) * 2 )*x)-x;
		chmin(ans,abs(res) * y + x);
	}else if(res <= 1){
		ans = x;
	}else{
		ans = (((abs(res)) * 2 )*x)-x;
		chmin(ans,(abs(res)-1) * y + x);
	}
	cout << ans <<endl;
	return 0;
}

上に行くのか下に行くのかなどでバグりちからしてしまった

ACまでの時間

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

f:id:iiiimmmmo:20201128231129p:plain
ARC109_A

結果

コンテスト結果

Aのみの1完でした。
ACまでが遅いしとてもひどい結果だと思います

f:id:iiiimmmmo:20201128231129p:plain
ARC109

パフォーマンス、レーティング変動

今回のパフォーマンスは196、前回より大幅に下がってしまいました。
レーティングはそれに伴い-43の594となりました。

f:id:iiiimmmmo:20201128231545p:plain
コンテスト成績表
f:id:iiiimmmmo:20201128231603p:plain
ARC109を終えた時点でのレーティング

反省点

今回はA問題でとてもはまってしまいしかもB問題を解けない散々な結果に終わってしまいました。
やっぱり冬はレートが冷えます 間違いないです。
次こそは頑張りたいです。