首页 > 代码库 > UVa 11614 - Etruscan Warriors Never Play Chess
UVa 11614 - Etruscan Warriors Never Play Chess
题目:有这样一种编排,第一组有1个人,第二组有2个人,..,第k组有k个人,现在有n个人,问能构成前几组。
分析:数论,分治。显然这个序列是一个前k项和,那么输出(k+1)*k /2不超过n的最大k值即可;二分或开方。
说明:数据较大,用long long。
#include <iostream> #include <cstdlib> #include <cstdio> using namespace std; typedef long long LL; LL bs(LL key) { LL L = 0LL,R = 10000000000LL; while (L < R) { LL M = (L+R+1LL)/2LL; if (M*(M+1LL)/2LL > key) R = M-1; else L = M; } return L; } int main() { int T; LL n; while (cin >> T) while (T --) { cin >> n; cout << bs(n) << endl; } return 0; }
UVa 11614 - Etruscan Warriors Never Play Chess
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。