编程介的小学生 2019-12-27 22:42 采纳率: 0.4%
浏览 97

Navy maneuvers 的代码设计

Problem Description
In times of peace, various countries have held regular maneuvers to maintain military’s vigilance. There is a navy fleet in a certain country which also starts a new round imaginary naval battle.

At the maneuver stage, the admiral intends to assess the combat effectiveness of two warships, “Victory” and “Glory”, so he lets two warships carry out countering exercises. Both of the warship commanders are young and promising, who graduated from naval academy as outstanding students. Not only have they had rich navigation direction experiences, but also have profound scientific knowledge, especially in mathematics.

The admiral appoints one marine area dotted with many islets. Suppose all these islets are occupied by the enemy, and there are positive integers of enemy firebases. The hypothetical exercise situations given by the admiral and the rule of the competition are as follows:

(1) All the occupied islets are connected. There are some routes among these islets, but the route from one islet to another islet is unidirectional. In other words, if we take an islet as a node and an islet route as an edge, then we will get a directed non-cyclic connected graph.
(2) There is a unique 1st islet in the graph. If we start from this islet, we can reach any other islet. (maybe the 1st islet is not the islet which is numbered 1)
(3) At the beginning of the maneuver, two warships simultaneously sail to the 1st islets and eliminate all enemy firebases together.
(4) The two warships, “Victory” and “Glory” take turns to navigate and exchange as soon as they arrive at an islet, then they move forward together. But each time they can only go along the unidirectional route, sail to the islet directly connected to the current, and eliminates all the enemy firebases on the islet. By the way, when start from 1st islet, “Victory” first navigates.
(5) Because each route is unidirectional, and graph is non-cycle, therefore the maneuver terminates when the two warships fail to go on navigating.
(6)When the maneuver ends, sum the numbers of eliminated enemy firebases on the routing path. If the number is greater than or equal to certain number f assigned by the admiral, then “Victory” wins. Otherwise, “Glory” wins.

The warship commanders are both mathematicians. After being assigned to such task, they see it is a Graph Theory problem. On the first simple directed non-cyclic connected graph, each node has a certain positive integer,it indicates the enemy firebases. The assignment is that two captains take turn to move forward along the directed edge until they are unable to do so. Then sum the total positive integers of the nodes on the routing path. Compare the number with the certain number f, and decides the final winning or losses.

Therefore, when it is the time for their own navigation, they are supposed to choose the route to win the final success.

Input
There are several test cases, in each case there are three positive integers n, m and f in first line. n indicates there are n (1< n <10000 ) nodes in the graph. The node serial number is arranged from 1 to n. m indicates that there are m edges in the graph. The following line has n positive integers, which indicate in sequence the positive integers in the nodes. Finally, there are m lines, and each line has two positive integers a, b (1< = a, b< =n), indicating there is a directed edge from the a node to the b node. Input is terminated by the end of file.

Output
To each group of the test case, if “Victory” wins, then output “Victory”. Otherwise, output “Glory”. The output each case takes up one line.

Sample Input
4 4 7
2 2 2 2
4 2
2 1
4 3
3 1
4 5 6
1 2 3 4
1 2
1 3
1 4
2 3
4 3

Sample Output
Glory
Victory

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-27 20:33
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    # 读取数据
    data <- readLines()
    
    # 解析输入数据
    num_nodes <- as.integer(data[1])
    adj_list <- matrix(as.numeric(readLines()), num_nodes, num_nodes)
    firebases <- as.integer(matrix(c(), num_nodes, num_nodes))
    
    for (i in 2:2*num_nodes) {
      adj_list[i-1, i] <- 1
      adj_list[i, i-1] <- 1
    }
    
    # 初始化两个战争舰的导航状态
    victory_status <- rep(NA, num_nodes)
    glory_status <- rep(NA, num_nodes)
    
    # 初始化敌方火炮数量
    enemy_firebases <- firebases
    
    # 开始比赛
    while (TRUE) {
      # 检查胜利者
      victory_winner <- TRUE
      
      for (i in 1:num_nodes) {
        if (!is.null(victory_status[i])) continue
        
        # 检查是否可以移动到下一个节点
        if (adj_list[i, victory_status[i]]) {
          next_node <- adj_list[i, victory_status[i]]
          
          # 如果是最后一个节点,则直接结束比赛
          if (next_node == i+1) {
            victory_winner <- FALSE
            break
          }
          
          # 更新导航状态
          victory_status[next_node] <- i
        } else {
          victory_winner <- FALSE
          break
        }
        
        # 检查是否可以移动到下一个节点
        if (adj_list[next_node, victory_status[next_node]]) {
          next_node <- adj_list[next_node, victory_status[next_node]]
          
          # 如果是最后一个节点,则直接结束比赛
          if (next_node == i+1) {
            victory_winner <- FALSE
            break
          }
          
          # 更新导航状态
          victory_status[next_node] <- i
        } else {
          victory_winner <- FALSE
          break
        }
      }
      
      # 检查是否达到获胜条件
      if (sum(enemy_firebases) >= f) {
        victory_winner <- TRUE
      }
      
      # 输出结果
      if (victory_winner) {
        print("Victory")
      } else {
        print("Glory")
      }
      
      # 清空敌方火炮数量
      enemy_firebases <- firebases
      
      # 检查是否有新的敌人出现
      if (all(sum(adj_list[, i]) == 0L) && !any(is.null(victory_status))) {
        victory_winner <- TRUE
      }
      
      # 更新敌方火炮数量
      firebases <- adj_list[!is.null(victory_status)]
    }
    

    请注意,上述代码适用于您的需求。如果您有其他要求或疑问,请随时告知我。

    评论

报告相同问题?