P8344「Wdoi-6」走在夜晚的莲台野-题解

看难度就明白这是道签到题

1.思路

题目要求我们将所有板子 放过 就行,但放入金就会清空银。
所以我们要在放金之前 尽可能多放银
这就是标签所说的贪心。

2.解法

由以上思路可得:
放银的数目依次为 z1z2 ... zx
由等差数列公式:
最多可以放 x(zx+z1)2 个银,令该式子为 σ
我们得到如下几种情况:

  • x 恰好满足放入所有 yx 被清空。
  • x 恰好满足放入所有 yx 被清空不足。
  • x 恰好满足放入所有 yx 被清空有余。

而这三种情况依次对应 =σ<σ>σ 的情况。
分别为 case1  case2  case3
case1: 显然满足要求。
case2: 翻译过来就是金放完了银有剩,则只需要剩下的银数量 小于等于 可放位置的数量就行了。
case3: 银放完了金有剩,具体剩多少呢?
我们令此时消耗的金数量为 x0 则将 x0 带入 σ 式。
整理一下得到关于 x0 的式子:
x02(2z1)x0+2y=0
得到:x0=2z1+(2z1)28y2
case2 理即可求解。

3.Code

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll T,x,y,z;
int main(){
	scanf("%lld",&T);
	while(T--){
		scanf("%lld%lld%lld",&x,&y,&z);
		if(x>z){printf("Merry\n");continue;}
		ll judge=x*(2*z-x-1)/2;
		if(judge==y){printf("Renko\n");continue;}
		if(judge<y&&(y-judge<=z-x)){printf("Renko\n");continue;}
		int x0=(2*z-1+sqrt((2*z-1)*(2*z-1)-8*y))/2;
		if(judge>y&&(x-x0)<=z){printf("Renko\n");continue;}
		printf("Merry\n");
	}
	return 0;
} 
posted @   ThinkGone  阅读(49)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示