模拟赛(持续更新)
T1 Jams 倒酒(pour)
题目大意:给出两个容积分别为a和b的酒杯与一个装有无限多酒的酒桶。规定以下三种操作:用酒桶中的酒将容积为b的酒杯填满、将容积为a的酒杯中的酒全部倒入酒桶中、将容积为b的酒杯中的酒倒入容积为a的酒杯中。其中在进行第三种操作时,若容积为a的酒杯在倒了一部分酒后就达到了容积,那么剩余的酒将留在容积为b的酒杯中。求无限次操作后,能在容积为a的酒杯中倒出的最小体积的酒以及第二种操作和第一种操作(在倒出的酒的体积不变的情况下)的最小操作数。
我们经过观察,发现题目可以转化成:对于不定方程,求出最小的。为了便于用计算,我们将不定方程转换为,要求求出的值也变成了。
————————————————————————————————————————————————————————————
定理:对于不定方程,最小的为。
证:设存在,则有。
将不定方程两边同时除以,得到。
因为,所以。
因为,所以,与上述证明冲突。
证毕。
————————————————————————————————————————————————————————————
随后我们使用求出不定方程的一组特解。由于操作数必须为正整数,所以需要将变为最小正整数。设新的一组特解为,则。将代入不定方程,得出的值。输出即可。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
#define int long long
int a, b, x, y, k0, k1, Gcd;
int exgcd(int a0, int b0)
{
if (b0 == 0)
{
x = 1;
y = 0;
return a0;
}
int d = exgcd(b0, a0 % b0);
int z = x;
x = y;
y = z - y * (a0 / b0);
return d;
}
signed main()
{
freopen("pour.in", "r", stdin);
freopen("pour.out", "w", stdout);
cin >> a >> b;
if (a == b)
{
cout << a << endl << "0 1";
return 0;
}
Gcd = exgcd(a, b);
cout << Gcd << '\n';
k0 = b / Gcd;
k1 = a / Gcd;
y += (y / k1) * k1;
if (y < 0) y += k1;
cout << -(Gcd - y * b) / a << " " << y;
return 0;
}
T2 土豪聪要请客
题目大意:给出一张由'.'或'X'组成的大厅地图,规定只有由'.'组成的长方形区域才可以放下桌子。一个由'.'组成的长为,宽为的长方形所能容纳的桌子可以坐下个人,求在大厅中最多能坐下的人数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类