AtCoder Regular Contest 112のメモ


前置き

Atcoderをやってみたので、自分用のメモです。
あとから加筆・修正する予定です。

問題

A

Q_A.go
package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
)

var sc = bufio.NewScanner(os.Stdin)

func nextInt() int {
    sc.Scan()
    i, e := strconv.ParseInt(sc.Text(),10,32)
    if e != nil {
        panic(e)
    }
    return int(i)
}


func main() {
    sc.Split(bufio.ScanWords)

    var T int
    fmt.Scanf("%d", &T)

    var L, R int 
    var count int

    counts := make([]int, T)

    for i:=0; i<T; i++{
        count = 0
        L = nextInt()
        R = nextInt()

        if (L == 0) && (R == 0){
            count = 1
        } else {
            d := R - L
            if (d<=R) && (L<=d){
                count = (d-L+1) * (d-L+2) /2
            }
        }
        counts[i] = count    
    }

    for i:=0; i<T; i++{
        fmt.Printf("%d\n", counts[i])
    }    
}

B

Q_B.go
package main

import (
  "fmt"
)

func main() {
  var B, C int64
  fmt.Scanf("%d %d", &B, &C)

  var b_0, b_1, b_2, b_3 int64
  var A0, A1, A2  int64

  b_0 = B - C/2 // 下がり続ける
  b_1 = - B - (C-1)/2 // 一周回って下がり続ける
  b_2 = B + (C-2)/2 // 一周回って下がり続け、最後に戻る
  b_3 = - B + (C-1)/2

  if B == 0{
    A0 = - b_0 + 1
    A1 = 0
    A2 = b_2 - B
  } else if B > 0{
    if (b_0 <= 0){
      A0 = B + B
    }  else {
      A0 = B - b_0 + 1
      A0 += b_3 + B
    }
    A1 = - B - b_1 + 1
    A2 = b_2 - B
  } else {
    if (b_1 <= 0){
      A1 = -B - B
    }  else {
      A1 = -B - b_1 + 1
      A1 += b_2
    } 
    A0 = B - b_0 + 1
    A2 = b_3 + B
  }

  fmt.Printf("%d\n", A0+A1+A2)
}

C

覚えてたら後で書きます。

D

覚えてたら後で書きます。

E

覚えてたら後で書きます。

F

覚えてたら後で書きます。