http://codeforces.com/problemset/problem/760/B
题意就是分枕头,每人至少一个,相邻之间差距不能大于1个,问第k个人最多能分多少枕头。
这道题只要从第k个人开始向上类似于金字塔一样的累加即可,要注意k很可能在边缘,这就要注意在加的过程中要少加几个。
#include<bits/stdc++.h>
using namespace std; long long int a[555][555];
long long int b[555];
long long int c[555];
int main(){
int n,m,k;
while(scanf("%d%d%d",&n,&m,&k)!=EOF)
{
int zjs=0;
int yjs=0;
int i=0;
int z=k-1;
int y=n-k;
int ans=1;
int cs=1;
m=m-n;
while(m>=cs*2-1-zjs-yjs)
{
ans++;
m-=cs*2-1-zjs-yjs;
cs++;
if(cs>=z+2)zjs++;
if(cs>=y+2)yjs++;
if(cs*2-1-zjs-yjs==n)
{
ans+=m/n;
break;
}
}
cout<<ans<<endl;
}
return 0;
}