AtCoder Grand Contest 027 総括

結果は1問AC。最近パッとしませんな(ギャンブル提出を控えてWA連発を避けようとしている)
(身も蓋もないことを言うと、プライベートキツいんすよ(帰れ))
ペナ差は意外と怖い。順位表で近かった相手とどんどん離れていく感覚は辛いものがある

A問題 AC
発想はすぐ出ると思うけど、実装が意外と厄介な代物。特にN番目の要素あたりで余りが出る場合の処理に自信が無かった。
綺麗に実装しようと思わない方がいいかもしれない。

ACコード

#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long int ll;

int N, x;
int a[110];

int main(){
	scanf("%d %d", &N, &x);
	for(int i = 0; i < N; i++) scanf("%d", &a[i]);
	sort(a, a + N);
	int res = 0;
	int i;
	for(i = 0; i < N; i++){
		if(x < a[i]) break;
		res++;
		x -= a[i];
	}
	if(x != 0 && x >= a[i]) res--;
	printf("%d\n", max(0, res));
	return 0;
}

ちなみにバグの取り方なんですけど、「サンプルがすべて合って、なおかつある程度確信があればいったん提出。」「それでもWAが出たら、バグりそうなケースを作る」の流れで最近はやっています。
きょうのWAコードはこれなんですけど、

#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long int ll;

int N, x;
int a[110];

int main(){
	scanf("%d %d", &N, &x);
	for(int i = 0; i < N; i++) scanf("%d", &a[i]);
	sort(a, a + N);
	int res = 0;
	for(int i = 0; i < N; i++){
		if(x < a[i]) break;
		res++;
		x -= a[i];
	}
	if(x != 0) res--;
	printf("%d\n", max(0, res));
	return 0;
}

これだとN = 2, x = 99, a = {50, 50}でWAが出るので、「全員に配り切って、なおかつキャンディが余っている」場合のみres--の処理をするよう改造しました。

B問題 no submit
「これは頑張ったら出来るやろ!」と思って見てたら順位表の1ページ目ですら穴だらけ。
コメントはプロに任せます。