JOI 2015/2016予選に参加した話

こんにちは.kurokojiです.数日前にAdventCalendarの記事でもお話したように,結果が出てからJOIの話をするとのことでしたが,先日結果が出ました.

2完+3問目の部分点で220点になりました.

とても悔しい結果になってしまいました.

反省などを含め,書いたコードを晒そうと思います.

1問目

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

int main()
{
	int pt[6];
	int tmp_1[4], tmp_2[2];
	int sum = 0;

	for (int i = 0; i < 6; i++){
		scanf("%d", &pt[i]);
	}

	for (int i = 0; i < 4; i++){
		tmp_1[i] = pt[i];
	}

	for (int i = 4, j = 0; i < 6; i++, j++){
		tmp_2[j] = pt[i];
	}

	sort(tmp_1, tmp_1 + 4);
	sort(tmp_2, tmp_2 + 2);
	reverse(tmp_1, tmp_1 + 4);
	reverse(tmp_2, tmp_2 + 2);

	for (int i = 0; i < 3; i++){
		sum += tmp_1[i];
	}

	sum += tmp_2[0];

	cout << sum << endl;
	
	return (0);
}

あとから気づいたのですが,全部の合計から引いた方がよりコンパクトなコードになったと思います.

2問目

#include <cstdio>
#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
	int n, m;
	int st[101];

	scanf("%d%d", &n, &m);

	for (int i = 0; i < n; i++){
		scanf("%d", &st[i]);
	}

	for (int k = 1; k <= m; k++){
		for (int i = 0; i < n - 1; i++){
			if (st[i] % k > st[i + 1] % k){
				swap(st[i], st[i + 1]);
			}
		}
	}

	for (int i = 0; i < n; i++){
		cout << st[i] << endl;
	}

	return (0);
}

これは書いてあることそのままやれば良かったので簡単でした.これにはあまり言うことは無いでしょう.

3問目

#include <cstdio>

using namespace std;

int main()
{
	printf("88\n");

	return (0);
}

解けなくて辛かった.部分点だけ狙いにいきました.1つ目のinputは人力で出来たので,その結果をただ単に書いて出しました.

感想

3問目の解法を思いつかなかったのが悔しい.とにかく,AOJとか解きまくって覚えるしかないのかな...
もっと努力しないといけないのが身に染みて分かりました.

また1年生で予選を突破出来た人はいません.久留米は突破してる人いるし僕たち相当差を付けられてるのでは?
来年は行きます.