年中春休み

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

競技プログラミング 4(過去問 ABC 051,ダイクストラ法)

解くのを忘れていたのでちょっと新しい方に戻って。
abc051.contest.atcoder.jp

今回からコードを載せる試みを行っています。

A問題
6文字と14文字目を上書きしました。

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
 
int main() {
	string s;
	cin >> s;
	s[5] = ' ';
	s[13] = ' ';
	cout << s << endl;
	return 0;
}




B問題
二重ループで全部調べました。

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
 
int main() {
	int k, s;
	cin >> k >> s;
	int ans = 0;
	for (int x = 0; x <= k; x++) {
		for (int y = 0; y <= k; y++) {
			int z = s - x - y;
			if (z >= 0 && z <= k) {
				ans++;
			}
		}
	}
	cout << ans << endl;
	return 0;
}




C問題
なんというかかなり愚直に書いたんですけど恐らくもっとスマートに書けると思います。
たぶんstringの使い方が全然わかってない気がする。かなりテキトーに使っています。

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
 
int main() {
	int sx, sy, tx, ty;
	cin >> sx >> sy >> tx >> ty;
	string ans = "";
	for (int i = 0; i < tx - sx; i++) {
		ans += "R";
	}
	for (int i = 0; i < ty - sy; i++) {
		ans += "U";
	}
	for (int i = 0; i < tx - sx; i++) {
		ans += "L";
	}
	for (int i = 0; i < ty - sy; i++) {
		ans += "D";
	}
 
	ans += "D";
	for (int i = 0; i <= tx - sx; i++) {
		ans += "R";
	}
	for (int i = 0; i <= ty - sy; i++) {
		ans += "U";
	}
	ans += "L";
 
	ans += "U";
	for (int i = 0; i <= tx - sx; i++) {
		ans += "L";
	}
	for (int i = 0; i <= ty - sy; i++) {
		ans += "D";
	}
	ans += "R";
	cout << ans << endl;
	return 0;
}




D問題
わかりませんでした。定期的に最短経路問題はD問題あたりで見るので解説に載っていたダイクストラ法を勉強することにしました。
とりあえず検索した中でわかりやすそうな感じがしたのはこれ?かなという気がします。
kuuso1.hatenablog.com
ほんのりとしか理解出来ていないのでもっと真面目に勉強して自分でもコードが書けるようにしたいところです。





A,B,Cの難易度はいつもより控えめだった気がします。
Dはもうちょっと勉強しないと安定してACとれないと思うので勉強頑張っていきたいです。
今日のABCは出たかったんですが諸事情により出られません、悲しい。