結果
| 問題 |
No.1 道のショートカット
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2018-04-20 01:24:02 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,868 bytes |
| コンパイル時間 | 322 ms |
| コンパイル使用メモリ | 30,976 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-07-08 05:00:51 |
| 合計ジャッジ時間 | 7,218 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | RE * 4 |
| other | RE * 40 |
コンパイルメッセージ
main.c: In function 'main':
main.c:19:7: warning: implicit declaration of function 'malloc' [-Wimplicit-function-declaration]
19 | S = malloc(V * sizeof(int));
| ^~~~~~
main.c:2:1: note: include '<stdlib.h>' or provide a declaration of 'malloc'
1 | #include <stdio.h>
+++ |+#include <stdlib.h>
2 |
main.c:19:7: warning: incompatible implicit declaration of built-in function 'malloc' [-Wbuiltin-declaration-mismatch]
19 | S = malloc(V * sizeof(int));
| ^~~~~~
main.c:19:7: note: include '<stdlib.h>' or provide a declaration of 'malloc'
ソースコード
#include <stdio.h>
typedef struct state
{
int position;
int Y_sum;
} state_t;
int main(void)
{
int N; //街の数
scanf("%d", N);
int C; //手持ちのお金
scanf("%d", &C);
int V; //道の数
scanf("%d", &V);
int *S; //S街から
S = malloc(V * sizeof(int));
for (int i = 0; i < V; i++)
{
scanf("%d", S[i]);
}
int *T; //T街までの移動
T = malloc(V * sizeof(int));
for (int i = 0; i < V; i++)
{
scanf("%d", T[i]);
}
int *Y; //コスト
Y = malloc(V * sizeof(int));
for (int i = 0; i < V; i++)
{
scanf("%d", Y[i]);
}
int *M; //時間
M = malloc(V * sizeof(int));
for (int i = 0; i < V; i++)
{
scanf("%d", M[i]);
}
int max_time = 1000 * 1500 + 1; //No.1の道がかかる時間
state_t *current_state;
current_state = malloc(V * sizeof(state_t));
state_t *next_state;
next_state = malloc(V * sizeof(state_t));
int current_num = 1;
int next_num = 0;
while(1)
{
next_num = 0;
for (int i = 0; i < current_num; i++)
{
for (int j = 0; j < V; j++)
{
if (current_state[i].position == S[j])
{
if (T[j] != N)
{
next_state[next_num].position = T[j];
next_state[next_num].Y_sum = current_state[i].Y_sum + Y[j];
next_num++;
}
else
{
if (current_state[i].Y_sum + Y[j] < max_time)
{
max_time = current_state[i].Y_sum + Y[j];
}
}
}
}
}
if(next_num==0)
{
break;
}
for(int i=0;i<next_num;i++)
{
current_state[i].position = next_state[i].position;
current_state[i].Y_sum = next_state[i].Y_sum;
}
current_num = next_num;
}
if(max_time==1000 * 1500 + 1)
{
printf("-1\n");
}
else
{
printf("%d\n",max_time);
}
}