bzoj2987 Earthquake 类欧几里得

本文详细介绍了类欧几里得算法的应用,通过解决特定的数学问题来展示该算法的几何意义及其在求解非负整数解中的高效性。

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

Description


给定a,b,c,求满足方程Ax+By<=C的非负整数解

A,B<=10^9.C<=Min(A,B)*10^9

Solution


考虑枚举x得到yCAxBy≤⌊C−AxB⌋
类欧几里得的经典应用,时间太紧了我就先去吃个饭回来再写
回来辣
类欧的几何意义可以看成是求一个梯形内的整点数,不包括纵坐标为0的点,包括边界上的点
先设f(n,a,b,c)=ni=0ai+bcf(n,a,b,c)=∑i=0n⌊ai+bc⌋
aca≥cbcb≥c,那么有
f(n,a,b,c)=(n+1)n2ac+(n+1)bc+f(n,a%c,b%c,c)f(n,a,b,c)=(n+1)n2⌊ac⌋+(n+1)⌊bc⌋+f(n,a%c,b%c,c)
至于怎么推的可以考虑把前面两项再塞回Σ里面看看

若两个都不满足,那么令m=na+bcm=⌊na+bc⌋,有
f(n,a,b,c)=ni=0mj=1[jai+bc]f(n,a,b,c)=∑i=0n∑j=1m[j≤⌊ai+bc⌋],这个可以看成是枚举可行的整点
我们把表达式单独拉出来jai+bcj≤⌊ai+bc⌋
化一下把i单独弄出来得到icj+cb1ai≥⌊cj+c−b−1a⌋,套进原本的柿子里面,这个就等同于一行一行枚举了
然后有f(n,a,b,c)=nmf(m1,c,cb1,a)f(n,a,b,c)=n∗m−f(m−1,c,c−b−1,a)

复杂度分析到处都有我就不贴了

Code


#include <stdio.h>
#include <string.h>
#define rep(i,st,ed) for (int i=st;i<=ed;++i)

typedef long long LL;

LL solve(LL n,LL a,LL b,LL c) {
    if (!c) return 0;
    if (a>=c||b>=c) {
        return solve(n,a%c,b%c,c)+(a/c)*n*(n+1)/2+(b/c)*(n+1);
    } else {
        LL m=(n*a+b)/c;
        return n*m-solve(m-1,c,c-b-1,a);
    }
}

int main(void) {
    LL a,b,c; scanf("%lld%lld%lld",&a,&b,&c);
    printf("%lld\n", solve(c/a,a,c%a,b)+c/a+1);
    return 0;
}
### 解决方案 为了确保MathType公式编号最后一行对齐,在Word中的操作可以遵循特定的格式调整方式。当遇到公式编号对齐的情况时,可以通过以下几种方法来解决问题。 #### 方法一:自定义样式并应用 创建一个新的段落样式专门用于公式及其编号。通过这种方式能够更好地控制公式的显示效果以及编号的位置[^3]。 ```plaintext 1. 打开“设计”选项卡下的“样式”,点击右侧的小箭头进入更多样式界面; 2. 选择“创建新样式”,命名为`FormulaWithNumber`; 3. 设置此样式的对齐方式为居中,并指定后续段落样式为正文或其它适当样式; 4. 对于编号部分,则单独作为一个右对齐的段落处理。 ``` #### 方法二:使用制表位精确调整 利用制表符功能可以让公式编号在同一行内完美对齐。这种方法适用于希望保持原有布局的同时微调位置的情形[^4]。 ```plaintext 1. 将光标放置到要插入公式的地方; 2. 插入公式后按Tab键移动到期望的编号位置; 3. 调整水平标尺上的制表位至页面边缘附近,使得编号能贴紧右边框; 4. 输入公式编号(可采用手动输入或是域代码形式)。 ``` #### 方法三:借助表格结构辅助定位 如果上述两种办法仍无法满足需求,考虑构建一个简单的单行双列表格作为载体。这样做的好处是可以更灵活地管理各元素之间的相对关系,同时也便于日后维护修改[^1]。 ```plaintext | 公式 | 编号 | | :---: | ---:| | E=mc² | (1) | 注意这里边框线应设为无颜色以隐藏起来不影响视觉呈现。 ``` 以上三种策略可以根据实际应用场景和个人偏好选用最合适的那一种来进行尝试。通常情况下,合理组合这些技巧往往能达到令人满意的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值