题目链接:http://codeforces.com/contest/760/problem/B
题意:给你n张床,m个枕头,每张床都必须有一个枕头,而相邻的床的枕头数目差值不能超过1,现在告诉你主角在k号床,问你主角最多能有几个枕头
解析:最好的分配方法应该是,每人都拿一个枕头,然后k号拿一个,如果还能拿k-1~k+1都拿一个,再拿下去就是k-2~k+2,直到不能拿为止
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <queue>
#include <map>
using namespace std;
const int maxn = 1e6+100;
const int inf = 0x7ffffff;
int main(void)
{
int n,m,k;
scanf("%d %d %d",&n,&m,&k);
int ans = 1;
m -= n;
int l = k,r = k;
while(m>=(r-l+1))
{
ans++;
m-=(r-l+1);
l--;
r++;
l = max(1,l);
r = min(r,n);
if(l==1 && r==n)
break;
}
ans += m/(r-l+1);
printf("%d\n",ans);
return 0;
}