結果

問題 No.5 数字のブロック
ユーザー subsn
提出日時 2023-05-26 15:45:51
言語 C
(gcc 13.3.0)
結果
AC  
実行時間 220 ms / 5,000 ms
コード長 1,786 bytes
コンパイル時間 421 ms
コンパイル使用メモリ 29,824 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2024-12-24 23:17:25
合計ジャッジ時間 3,171 ms
ジャッジサーバーID
(参考情報)
judge2 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 34
権限があれば一括ダウンロードができます

ソースコード

diff #

//#include <iostream>
#include <stdio.h>
#include <malloc.h>
char str[60000];//(5桁×10000件)+(空白1万-1) = 59999文字まで使われる可能性がある
int str_len = 0;

/// <summary>
/// グローバル変数strの中身を入力された文字列で上書きする
/// </summary>
void ReadString() {
	char c = getchar();
	str_len = 0;

	while (c != '\n') {
		str[str_len] = c;
		c = getchar();
		str_len++;
	}
}

/// <summary>
/// 入力された数字を返す
/// </summary>
/// <returns></returns>
int ReadNum() {
	char c = getchar();
	int num = 0;
	int numCnt = 0;
	while (c != '\n') {
		num = num * 10 + c - '0';
		c = getchar();
	}

	return num;
}

void Sort(int* nums, int n) {
	for (int i = 0;i < n - 1;i++) {
		for (int j = i + 1;j < n;j++) {
			if (nums[i] > nums[j]) {
				int work = nums[i];
				nums[i] = nums[j];
				nums[j] = work;
			}
		}
	}
}

int main()
{
	int boxWidth = ReadNum();	//箱のサイズ
	int quantity = ReadNum();	//箱に入れるブロックの数

	int *size;
	size = (int*)malloc(sizeof(int) * quantity);//箱に入れるブロックの数の分メモリーを動的に確保する


	ReadString();	//それぞれのブロックのサイズ
	int num = 0;	//集計中の値
	int cnt = 0;	//strの何番目を参照するかのカウンタ
	int index = 0;	//sizeの何番目に出来上がった値を入れるかのカウンタ
	while (1) {
		if (cnt >= str_len) {
			size[index] = num;
			break;
		}
		if (str[cnt] == ' ') {
			size[index] = num;
			num = 0;
			index++;
			cnt++;
			continue;
		}
		num = num * 10 + (str[cnt] - '0');
		cnt++;
	}
	Sort(size,quantity);
	int sum = 0;
	int canPlace = 0;
	for (int i = 0;i < quantity;i++) {
		sum += size[i];
		if (sum > boxWidth) {
			break;
		}
		canPlace++;
	}
	printf("%d\n",canPlace);
}
0