白駿10448ユリカ理論-Swift


ユリカ理論


質問する


https://www.acmicpc.net/problem/10448

を選択します。

  • 数学
  • ルーティング転送アルゴリズム
  • に答える


    すべての数をブルートフォスでチェックし、その数を生成できれば1を出力します.Inputも含めて、四重砲口を使いました...他の人が使った時間と私が使った時間の差が大きいので改善しました.
  • は、まずt列に1000以下の三角数を加えると、どのゲートも44^3回転するので、t列にnum未満の数だけ追加するようになりました.
  • 数を生成する方法がある場合、コードはループから飛び出すことによって改善される.
  • ソースコード


    既存のプール
    var t: [Int] = []
    let n = Int(readLine()!)!
    for i in 1...44 {
        let sum = (i * (i + 1)) / 2
        t.append(sum)
    }
    for _ in 0..<n {
        let num = Int(readLine()!)!
        var isSuccess = false
        for i in 0..<t.count {
            for j in 0..<t.count {
                for k in 0..<t.count {
                    if t[i] + t[j] + t[k] == num {
                        isSuccess = true
                    }
                }
            }
        }
        isSuccess == true ? print(1) : print(0)
    }
    改善された回答
    let n = Int(readLine()!)!
    
    for _ in 0..<n {
        let num = Int(readLine()!)!
        var t: [Int] = []
        
        for i in 1...44 {
            let sum = (i * (i + 1)) / 2
            t.append(sum)
            if sum > num {
                break
            }
        }
        var isSuccess = false
        for i in 0..<t.count {
            for j in 0..<t.count {
                for k in 0..<t.count {
                    if t[i] + t[j] + t[k] == num {
                        isSuccess = true
                    }
                }
            }
        }
        
        isSuccess == true ? print(1) : print(0)
    }