题意:
有N个球,就过有限次变换最后达到一种恒定状态
思路:题意不难懂,这种恒定状态也比较好像,他必须要达成1,2,3,4这种序列才能恒定,那么我们就要找到每个状态恒定时的球的数目。1,3,6,10就是等差数列的前n项和。公式s=a1*n+(n-1)*n*d/2。
然后我们就可以用二分去找答案,但是要注意范围,二分的r的范围是2*1e9,因为题目给得数据范围是10的18次方。
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define ll unsigned long long
long long n;
long long erfen(long long l,long long r)
{
long long nn;
long long mid;
while(l<=r)
{
mid=(l+r)/2;
nn=mid*(mid+1)/2;
if(nn==n)
return nn;
else if(nn>n)
r=mid-1;
else
l=mid+1;
}
nn=r*(r+1)/2;
return nn;
}
int main()
{
int t;
int casee=0;
scanf("%d",&t);
while(t--)
{
scanf("%lld",&n);
printf("Case #%d: ",++casee);
printf("%lld\n",erfen(1,2*1e9));
}
}