REM 多分こんな風に書く人が多いんだろうな… ACLS XSCREEN 1 OPTION DEFINT OPTION STRICT VAR N,M,X,Y,T DIM COST[100,100] VAR I,J,K VAR INF=1000000 VAR ANS=0 INPUT N,M FOR I=0 TO N-1 FOR J=0 TO N-1 COST[I,J]=INF NEXT J NEXT I
FOR I=1 TO N INPUT X,Y,T COST[X,Y]=MIN(COST[X,Y],T) NEXT I
FOR I=0 TO N-1 FOR J=0 TO N-1 FOR K=0 TO N-1 IF COST[J,I]!=INF&&IF COST[I,K]!=INF THEN COST[J,K]=MIN(COST[J,K],COST[J,I]+COST[I,K]) ENDIF NEXT K NEXT J NEXT I
OPTION DEFINT INPUT N,M DIM AX[M],AY[M],AT[M] 'アンテナの情報 FOR I=0 TO M-1 INPUT AX[I],AY[I],AT[I] NEXT SORT AX,AY,AT '送信元の順に並べ替え
DIM TTIME[N] '端末nに届く時刻 INF=1000000 FILL TTIME,INF,1 '端末0以外をFILL DIM TID[N],TTIME_CPY[N] 'あとでSORTする用 FOR I=0 TO N-1 TID[I]=I NEXT SENDED=0 '送信(受信ではない)が完了した端末の数
WHILE SENDED<N-1 ' TID[SENDED]からデータを送信する TM=TTIME[TID[SENDED]] '現在時刻 FOR I=0 TO M-1 'ここはたぶんプチコン4でFINDを使うと速い IF AX[I]<TID[SENDED] THEN CONTINUE IF AX[I]>TID[SENDED] THEN BREAK TTIME[AY[I]]=MIN(TTIME[AY[I]],TM+AT[I]) NEXT TTIME[TID[SENDED]]=-1 '送信完了(SORTで必ず前に来るように-1をセット) SENDED=SENDED+1 '送信完了した端末の個数 COPY TTIME_CPY,TTIME SORT TID SORT TTIME_CPY,TID '早くデータが届いた順にTIDを並べ替え WEND