Time Limit: 1000MS | Memory Limit: 16384K | 64bit IO Format: %I64d & %I64u |
Description
Input
Output
Sample Input
input | output |
---|---|
4 3 14 7 6 | 0 0 1 0 |
Sample Output
Hint
这道题挺有意思的,挺简单的题竟然也可以弄到这么难,经典啊,题意就是一个类似 ),注意,算值的时候一定要把mid和sum都定义为__int64类型的,不然你会一直WA的
代码:
#include<stdio.h>
#include<math.h>
#include<string.h>
__int64 mid,sum;
int main()
{
int n,low,hig,t,i;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
if(n==1){printf("1\n");continue;}
low=1;hig=200000;
while(low<hig)
{
mid=(low+hig)/2;
sum=mid*(mid+1)/2;
if(sum>n)
hig=(int)mid-1;
else low=(int)mid+1;
}
if(low<200)i=0;
else i=low-200;
for(;i<=hig+200;i++)
{
mid=(__int64)i;
sum=mid*(mid+1)/2;
if(n<sum)
break;
}
i--;
mid=(__int64)i;
sum=mid*(mid+1)/2;
n=n-(int)sum;
if(n==1)printf("1\n");
else printf("0\n");
}
return 0;
}