2016年8月20日 星期六

萬球同心移位( VB參考)

' 測試資料改為第1行為 t 組,0<t<9,接著每組 第1列n  m ,接著 m列
' 有n個球編號0~n-1{ 3<n<5*10^5},先將n個球依順時鐘圍成一圈
' m個指令F A B R A B {2<m<10^3}
' F A B 代表將編號A的球移至B球的順鄰處  R A B 代表將編號A的球移至B球的逆鄰處
' 執行m個指令後,輸出編號0的 逆鄰 及 順 
參考程式:


    Const MaxN As Integer = 500000 '最多 50 萬
 Dim f(MaxN) As Integer
 Dim r(MaxN) As Integer
 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
   FileOpen(1, "in1.txt", OpenMode.Input)
   'FileOpen(2, "in2.txt", OpenMode.Input) '本題只 in1
   FileOpen(3, "out.txt", OpenMode.Output)
     For fn = 1 To 1  '本題只 in1
       If fn = 2 Then PrintLine(3)
       Dim t As Integer = LineInput(fn)
       For k = 1 To t
           Dim line As String = LineInput(fn)
           Dim nm() = line.Split(" ")  '依 空白 分 n m
           Dim n As Integer = nm(0), m As Integer = nm(1)
           For i = 1 To n - 2
              f(i) = i + 1
              r(i) = i - 1
           Next
           f(0) = 1 : f(n - 1) = 0
           r(0) = n - 1 : r(n - 1) = n - 2
           For j = 1 To m
           line = LineInput(fn)
           Dim cab() = line.Split(" ")  '依 空白 分 c a b
           Dim c As Char = cab(0), a As Integer = cab(1), b As Integer = cab(2)
           If a = b Then Continue For
           If (c = "F" And f(b) = a) Then Continue For
           If (c = "R" And r(b) = a) Then Continue For
           shout(a)
           If c = "F" Then
              shinf(a, b)
           Else
              shinr(a, b)
           End If
        Next j
        PrintLine(3, r(0) & " " & f(0))
     Next k
  Next fn
  End
End Sub

  Sub shout(ByVal a As Integer) '將 a 移出
        r(f(a)) = r(a)
        f(r(a)) = f(a)
  End Sub
  
  Sub shinf(ByVal a As Integer, ByVal b As Integer) '將 a 移入至 b 之順鄰處
        r(a) = b
        f(a) = f(b)
        r(f(b)) = a
        f(b) = a
  End Sub
    
 Sub shinr(ByVal a As Integer, ByVal b As Integer) '將 a 移入至 b 之逆鄰處
        f(a) = b
        r(a) = r(b)
        f(r(b)) = a
        r(b) = a
 End Sub
in1.txt
3
4 3
R 3 2
F 3 0
F 1 2
5 6
F 2 1
R 1 3
F 2 4
F 1 4
R 0 2
R 3 4
6 8
F 1 3
R 3 4
F 5 1
F 3 3
R 2 0
R 0 3
F 4 5
R 2 1

out.txt
1 3
1 2
4 3

Related Posts:

  • OX連線(VB版) 程式碼:     Dim n As Integer '  n x n     Dim a(10, 10) As Integer     Private Sub Form1_Load( . . . ) Handles … Read More
  • C129 油田數(VB版)     Dim n As Integer, m As Integer          'n列 x m格     Dim a(100, 100) As Integer      … Read More
  • dfs-1(vb版參考)程式碼:     Dim a(100, 100) As Integer     Dim m As Integer, n As Integer     Private Sub Form1_Load( ...  ) Handles M… Read More
  • a982迷宮問題(VB版)   Dim n As Integer                     ' n x n 方形     Dim a(100, 100) As Intege… Read More
  • DFS應用-1 DFS應用-1: (A)有幾處水窪?上下左右算連通 (B)最大一處有多大{1個數數}?  (C,D)改成類似踩地雷(八方)算連通 0 1 2 3 4 5 6 0 1 2 … Read More

0 意見:

張貼留言