Codeforces Round 894 (Div. 3) D(数学题好难不会)

 

题目链接:Codeforces Round 894 (Div. 3) D

题目:

特马决定提高自己制作冰淇淋的技能。他已经学会了如何用两个球把冰淇淋做成圆锥形。

在痴迷冰淇淋之前,特马对数学很感兴趣。因此,他很想知道要制作完全n个不同类型的冰淇淋,最少需要个种不同的冰淇淋球。

可能的冰淇淋口味有很多:1,2,3,…特马可以制作任何口味(可能相同)的双球冰淇淋。

如果两个冰淇淋的球口味不同,那么这两个冰淇淋就会被认为是不同的。例如,{1,2}={2,1},但{1,1}≠{1,2}。

例如,有以下冰淇淋球:{1,1,2},特马只能制作两种冰淇淋:{1,1}和{1,2}。

注意,特马不需要同时制作所有的冰淇淋甜筒。这意味着他可以独立制作甜筒冰淇淋。另外,为了给某个x制作一个{x,x}圆锥,特马至少需要2个x类型的球

请帮助特马回答这个问题。可以证明答案总是存在的。

输入

每个测试由多个测试用例组成。第一行输入包含一个整数 t (1≤t≤104) - 测试用例的数量。然后是测试用例的描述。

每个测试用例的第一行包含一个整数 n (1≤n≤1018) - Tema 想要制作的冰淇淋类型的数量。

输出

对于每个测试用例,输出一个整数 - Tema 需要购买的最小球数。

Codeforces Round 894 (Div. 3) D(数学题好难不会)_第1张图片

在第一个示例中,有以下球类即可:{1,1}注意,集合 {1} 是不够的,因为我们至少需要 2 个类型为 11 的球才能组成锥形 {1,1}

在第二个示例中,用2个球是不可能做出锥形的,但是可以用这些球做出:{1,2,3}.

在第三个示例中,{1,2,3,4}是最佳答案,因此我们可以得到以下冰淇淋筒:{1,2}, {1,3}, {1,4}, {2,3},{2,4}, {3,4}.

题解:

Codeforces Round 894 (Div. 3) D(数学题好难不会)_第2张图片

// Problem: D. Ice Cream Balls
// Contest: Codeforces - Codeforces Round 894 (Div. 3)
// URL: https://codeforces.com/contest/1862/problem/D
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include
using namespace std;

typedef long long ll;

const int N = 2e5+5;

bool check(ll x,ll sum){
	if(x*(x-1)/2<=sum) return true;
	return false;
}

int main(){
	int T;
	cin>>T;
	while(T--){
		ll n;
		cin>>n;
		if(n==1){
			cout<<"2\n";
			continue;
		}
		ll l=1,r=2e9;
		while(l

 

你可能感兴趣的:(算法)