D - Halfwayhttps://vjudge.csgrandeur.cn/problem/Gym-101652Q
暴力:
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
int n;
scanf("%lld",&n);
int m=n*(n-1)/2;
if(n==2)//没有这个特判就错了
{
printf("1");
}
else
{
if(m%2)
m=m/2+1;
else
m=m/2;
int sum=0;
for(int i=n-1; i>=1; i--)
{
if(sum>=m)
{
printf("%lld\n",n-i-1);//因为是从后往前加,所以是n-i-1,又因为i是先--,所以n-i之后要减1
break;
}
else
sum+=i;
}
}
return 0;
}
二分:(半懂)
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
int n;
scanf("%lld",&n);
int sum=n*(n-1)/2;
int x;
if(sum%2==0)x=sum/2;
else x=sum/2+1;
int l=1,r=n;
int t,mid;
while(l<r)
{
mid=(l+r)/2;
t=sum-(n-mid)*(n-mid-1)/2;
if(t==x)break;
else if(t>x)r=mid;
else l=mid+1;
}
if(t>=x)printf("%lld",mid);
else printf("%lld",mid+1);
return 0;
}