问题 C: Boxes and Balls
时间限制: 1 Sec 内存限制: 64 MB提交: 7 解决: 6
[ 提交][ 状态][ 讨论版]
题目描述
Tom’s friend Jerry, from KBW, just showed him a great magic trick. At the beginning of the trick, there is one box on the ground with some number of balls in it. Jerry then performs this operation over and over again:
1. put a new empty box down on the ground
2. move one ball from each other box into that new empty box
3. remove any boxes that are now empty
4. sort the boxes in nondecreasing order by the number of balls in them Tom noticed that it is possible for this operation to leave the state of the boxes and balls unchanged!
For example:
• Suppose that at the beginning of the trick, the one box contains 3 balls.
• In the first operation, Jerry adds a new empty box, puts 1 ball from the existing box into it, and sorts the boxes, so after that operation, there will be 2 boxes on the ground, one with 1 ball and one with 2 balls.
• In the second operation, Jerry adds a new empty box and puts 1 ball from each of the existing 2 boxes into it; this creates one empty box, which Jerry removes, and then he sorts the boxes. So there are 2 boxes on the ground, one with 1 ball and one with 2 balls. But this is exactly the state that was present before the second operation!
Tom thought about the trick some more, and realized that for some numbers of balls, it is not possible for the operation to leave the state unchanged. For example, if there are 2 balls at the beginning, then after one operation, there will be two boxes with 1 ball each, and after 2 operations, there will be one box with 2 balls, and so on, alternating between these two states forever.
Tom looked around in his room and found infinitely many empty boxes, but only N balls. What is the maximum number of those balls that he could use to perform this trick, such that one operation leaves the state unchanged?
输入
The first line of the input gives the number of test cases, T. T lines follow.
Each line consist of one integer N, the number of balls Tom could find.
Limits: • 1 ≤ T ≤ 100. • 1 ≤ N ≤ 1018 .
输出
样例输入
3
1
2
3
样例输出
Case #1: 1
Case #2: 1
Case #3: 3
一发过好爽啊。。。以为肯定会WA的。。。里面有个数是乱写的。。
很容易就发现要找1+2+3+。。。。+n的在题目给的N内的最大和
然后就拿递增求和公式瞎搞搞搞
[n*(n+1)]/2<=N
2N >=n(n+1)
两边开个方,以 根号2N为下届找个n
代码:
/*
━━━━━┒
┓┏┓┏┓┃μ'sic foever!!
┛┗┛┗┛┃\○/
┓┏┓┏┓┃ /
┛┗┛┗┛┃ノ)
┓┏┓┏┓┃
┛┗┛┗┛┃
┓┏┓┏┓┃
┛┗┛┗┛┃
┓┏┓┏┓┃
┛┗┛┗┛┃
┓┏┓┏┓┃
┃┃┃┃┃┃
┻┻┻┻┻┻
*/
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
using namespace std;
int main(){
int t;
scanf("%d",&t);
long long i,n,m,result = 0;
int rnd=1;
while(t--){
scanf("%lld",&n);
m=sqrt(2*n);
for(i=m+10;;i--){
if((i*(i+1))/2<=n){
result = (i*(i+1))/2;
break;
}
}
printf("Case #%d: %lld\n",rnd,result);
rnd++;
}
return 0;
}