結果

問題 No.45 回転寿司
ユーザー Fre_de_ricaFre_de_rica
提出日時 2019-02-23 17:23:49
言語 C
(gcc 12.3.0)
結果
WA  
実行時間 -
コード長 2,051 bytes
コンパイル時間 119 ms
コンパイル使用メモリ 30,720 KB
実行使用メモリ 6,948 KB
最終ジャッジ日時 2024-05-07 18:34:30
合計ジャッジ時間 982 ms
ジャッジサーバーID
(参考情報)
judge3 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 WA -
testcase_01 WA -
testcase_02 WA -
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
testcase_17 WA -
testcase_18 WA -
testcase_19 WA -
testcase_20 WA -
testcase_21 WA -
testcase_22 AC 1 ms
5,376 KB
testcase_23 AC 1 ms
6,944 KB
testcase_24 AC 1 ms
6,944 KB
testcase_25 AC 1 ms
5,376 KB
testcase_26 WA -
testcase_27 WA -
testcase_28 WA -
testcase_29 WA -
testcase_30 WA -
testcase_31 WA -
testcase_32 AC 1 ms
6,944 KB
testcase_33 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <stdio.h>
#include <stdlib.h>

typedef struct {
	int value;
	int prev_array_num;
	int next_array_num;
	int array_num;
} value_data;

int desc(const void *p, const void *q);
int void_check( int *, int);
void void_data_insert(int *, int, int, int);

int main(void){

	int sushi_count = 0;
	int sushi_input_value_data[1001];
	value_data sushi_value_data[1001];
	int void_list[3001] = {0};
	int void_check_n;
	size_t size;

//	value_data *p = sushi_value_data;
//	value_data *cp = p;

	int value_sum = 0;

	scanf("%d", &sushi_count);

	for (int i = 0; i < sushi_count; i++) {
		scanf("%d", &sushi_input_value_data[i]);
		sushi_value_data[i].value = sushi_input_value_data[i];
		sushi_value_data[i].next_array_num = i + 1+1;
		sushi_value_data[i].prev_array_num = i - 1+1;
		sushi_value_data[i].array_num = i+1;
	}

	size = sizeof(sushi_value_data)/sizeof(value_data);

	qsort(sushi_value_data, size, sizeof(value_data), desc);

	for (int i = 0; i < sushi_count; i++) {

		void_check_n = void_check((int *)&void_list, sushi_value_data[i].array_num);

		if (void_check_n != 1) {
			value_sum += sushi_value_data[i].value;

			void_data_insert((int *)&void_list, sushi_value_data[i].array_num,
				sushi_value_data[i].next_array_num, sushi_value_data[i].prev_array_num);
		}
	}

	printf("%d\n", value_sum);

	return 0;
}

int desc(const void *p, const void *q) {
	value_data *P_data = (value_data *)p;
	value_data *Q_data = (value_data *)q;

	return Q_data->value - P_data->value;
}

int void_check( int *void_list, int array_num) {

	int i = 0;
	int ret = 0;
	int *p = void_list;

	while(1){
		if (*p == 0) {    //配列の終端
			break;
		}
		if (*p == array_num) {
			ret = 1;
		}
		i++;
		p++;
	}
	return ret;
}

void void_data_insert(int *void_list, int array_num, int next_array_num, 
	                  int prev_array_num) {
	int i = 0;
	int *p = void_list;

	while (1) {

		if (*p == 0 && 
			 *(p+1) == 0 &&
			 *(p+2) == 0 ) {

			*p = array_num;
			*(p+1) = next_array_num;
			*(p+2) = prev_array_num;

			break;
		}
		p++;
		i++;
	}

}
0