http://codeforces.com/contest/622/problem/A
给无限序列 1 12 123 1 2 3 4 1 2 3 4 5 。。。
找出第n个数是什么。。。
poj有道加强版的。。这个直接就是找到最接近n的那个 k*(k+1)/2即可。。
n=1e14. cf服务器比较6直接暴力就可以了。。
int main()
{
__int64 n;
scanf("%I64d",&n);
__int64 i=1;
while(n>i)
{
n-=i;
i++;
}
printf("%I64d\n",n);
return 0;
}
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <iostream>
using namespace std;
const int inf=2147483647;
const double pi=acos(-1.0);
double eps=0.000001;
__int64 get(__int64 x)
{
return x*(x+1)/2;
}
int bin(__int64 n)
{
__int64 l=1;
__int64 r=1e8;
while(l<=r)
{
if (r-l<=1)
{
if (get(r)<=n)
return r;
else
return l;
}
__int64 mid=(l+r)>>1;
if (get(mid)>n)
r=mid-1;
else
l=mid;
}
}
int main()
{
__int64 n;
scanf("%I64d",&n);
int ret=bin(n);
if (n-get(ret)==0)
printf("%I64d\n",ret);
else
printf("%I64d\n",n-get(ret));
return 0;
}