説明
ビー玉がロードされた袋を持って、バッグは、それぞれが2つの操作を行うことができます空の始まり暁明です。
大理石の複数に袋より数に1、。
ビー玉の袋から採取した2
バッグが空である場合、暁明は、(明らかに最初の操作は常に大理石に配置されている)の操作を行うことができます。今オペランドを与えられたnと、ビー玉、最終的な数kの袋を処理した後、あなたは暁明は、ビー玉の総数を取っ見つける見つけます。
トピック保証解けます。
エントリー
第m行の入力、データのM個のセットがあること(10グループまで)を表します。
続いて各行が空間で分離された2つの整数nとkを有する、行がMです。
輸出
Mの出力線は、それぞれ整数を除去したガラス玉の数の合計を表し
サンプル入力1
2 9 11 1 1
サンプル出力1
4 0
プロンプト
N <= 10 ^ 9
K <= 10 ^ 18
考え
例えば、ボールを取ることだった時ナ、ボールを置くために第2の操作あり
そう関係なく、n個の動作のシーケンスの、結果は同じである
*(A + 1)と言うことである/ 2-(NA)= K
^ 2 + 3A-2N-2K = 0の
=( - 3 + SQRT(9 + 8N + 8K))/ 2
*(A + 1)と言うことである/ 2-(NA)= K
導出(✧◡✧):
^ 2 +、A + 2N 2(a)は、2K =
A ^ 2 3A-2N + 0 = 2K-
プット回ボール、(A + 1)/ 2ボールモディを入れていません
^ 2∴aの+の-2N + 2A = 2KのA ^ 2 3A-2N + 0 = 2K-
プット回ボール、(A + 1)/ 2ボールモディを入れていません
^ 2 + 3A-2N-2K = 0の
=( - 3 + SQRT(9 + 8N + 8K))/ 2
ボールを入れる回数
Naがボールを取るために倍の数である(つまり、答えです)
Naがボールを取るために倍の数である(つまり、答えです)
コード(超短):
#include <cmath> の#include <cstdioを> する#include <CStringの> する#include <iostreamの> する#include <アルゴリズム> 名前空間STDを使用して、 int型メートル。 長い長いN、K、。 INTメイン(){ scanf関数( "%のD"、&M)。 (M--){一方 のscanf( "%のLLDの%のLLD"、&N&K)。 =(SQRT(9 + 8 * N + 8 * K)-3)/ 2。 printf( "%LLDする\ n"、NA)。 } 0を返します。 }