CodeForces 760B Frodo and pillows

本文解析了Codeforces上编号为760/B的问题——分枕问题。该问题要求每人至少获得一个枕头,且相邻两人获得的枕头数相差不超过一个,求解第k个人最多能得到多少枕头。通过一种类似金字塔的方式进行累加,特别注意边界条件的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值