結果
| 問題 |
No.45 回転寿司
|
| ユーザー |
Fre_de_rica
|
| 提出日時 | 2019-02-23 17:28:59 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,983 bytes |
| コンパイル時間 | 230 ms |
| コンパイル使用メモリ | 30,464 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-11-30 13:33:06 |
| 合計ジャッジ時間 | 1,324 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 WA * 3 |
| other | WA * 30 |
ソースコード
#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;
int *p = sushi_input_value_data;
size_t size;
int value_sum = 0;
scanf("%d", &sushi_count);
for (int i = 0; i < sushi_count; i++) {
scanf("%d", p);
sushi_value_data[i].value = *p;
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;
p++;
}
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++;
}
}
Fre_de_rica