icodelab除去大理石(データセット)

説明

ビー玉がロードされた袋を持って、バッグは、それぞれが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 +、A + 2N 2(a)は、2K =
A ^ 2 3A-2N + 0 = 2K-
プット回ボール、(A + 1)/ 2ボールモディを入れていません
^ 2∴aの+の-2N + 2A = 2Kの
   ^ 2 + 3A-2N-2K = 0の
   =( - 3 + SQRT(9 + 8N + 8K))/ 2

ボールを入れる回数
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を返します。
}

 


 

おすすめ

転載: www.cnblogs.com/mysh/p/11300765.html