年中春休み

年中春休みじゃないです。

競技プログラミング 9 (参加 ABC 056)

abc056.contest.atcoder.jp


参加しました。
久しぶりに参加出来たので良かった。



A問題
4通りしかないのでサクッと場合分けして終わり。

#include<iostream>
#include<string>
#include<algorithm>
#include<math.h>
#define ll long long
using namespace std;
 
int main() {
	string a, b;
	cin >> a >> b;
	if (a == "H") cout << b << endl;
	else if (b == "H") cout << "D" << endl;
	else cout << "H" << endl;
	return 0;
}


B問題
2つの図形の位置関係をaとbの大小関係から把握して後は重なっているかどうかを判定して答えを出しました。

#include<iostream>
#include<string>
#include<algorithm>
#include<math.h>
#define ll long long
using namespace std;
 
int main() {
	int w, a, b, ans = 0;
	cin >> w >> a >> b;
	if (a < b) {
		if (b - (a + w) > 0) ans = b - (a + w);
	} 
	if (a > b) {
		if (a - (b + w) > 0) ans = a - (b + w);
	}
	cout << ans << endl;
	return 0;
}


C問題
部分和の問題だ!と思って最近勉強した深さ優先探索を使ってみようと思ったのですがうまく実装出来ずに1時間近く溶かしてしまいました。
諦めてちょっと考えたら模範解答通りの実装が出来ました、悲しい。
というか、ごちゃごちゃ試行錯誤してるうちに思ったんですが、終点がどこになるのか決定していないのに深さ優先探索するのあんまりよろしくなさそうですね。

#include<iostream>
#include<string>
#include<algorithm>
#include<math.h>
#include<queue>
#define ll long long
using namespace std;
 
ll x;
 
int main() {
	cin >> x;
	ll sum = 0, a = 0;
	for (int i = 1;; i++) {
		sum += i;
		if (sum >= x) {
			a = i;
			break; 
		}
	}
	cout << a << endl;
	return 0;
}


D問題
残り時間的にも厳しかったのですが、時間があっても恐らく無理だったと思います。
そもそも解法が思い浮かばなかったし、解説を見ても部分点解答すら実装出来そうにないので他の人のコードを見たりもうちょっと勉強してみようと思います。悲しい。



ということでまた3完でした。
C問題が解けるようになるまでもまあまあ時間がかかりましたが、D問題が解けるようになるにはもっと大量の時間が必要になりそうなのでもうちょっと頑張って勉強していきたいです。