每日一题 - 240128 - C - Leftover Recipes

本文介绍了一个基于C++实现的整数线性规划问题的解决方案,通过枚举和固定1维的方法,解决给定一组条件下的最大值问题,时间复杂度为O(10^6*N)。

  • TAG - 芝士水题、算法 − 【枚举】、思维 − 【固定 1 维求 1 维】 芝士水题、算法 - 【枚举】、思维 - 【固定1维求1维】 芝士水题、算法【枚举】、思维【固定1维求1维】
  • 时间复杂度 - O ( 1 0 6 ∗ N ) O(10^6 \ast N) O(106N)
//
#include <bits/stdc++.h>
using namespace std;
#define int long long

const int N = 1e6 + 7;
int q[N], a[N], b[N];

void solve() {
	int n;
	scanf("%lld", &n);
	
	int maxq = 0, maxa = 0, maxb = 0;
	for (int i = 1; i <= n; i++) scanf("%lld", &q[i]), maxq = max(maxq, q[i]);
	for (int i = 1; i <= n; i++) scanf("%lld", &a[i]), maxa = max(maxa, a[i]);
	for (int i = 1; i <= n; i++) scanf("%lld", &b[i]), maxb = max(maxb, b[i]);
	
	int ans = 0;
	for (int x = 0; x <= maxq; x++) {
		int y = maxq;
		for (int i = 1; i <= n; i++) {
			if (q[i] - x * a[i] < 0) {
				y = -maxq;
				break;
				
			// 非法除零
			} else if (b[i] != 0) {	
				// x * a[i] <= 1e12
				y = min(y, (q[i] - x * a[i]) / b[i]);
			}
		}
		ans = max(ans, x + y);
	}
	printf("%lld\n", ans);
}

signed main() {
	int t = 1;
//	scanf("%d", &t);
	while (t--) solve();
	return 0;
}

实现细节

  • `

参考示意图

  • `

参考链接


作者 | 乐意奥AI

### Git 子模块更新与 `--deinit` 选项详解 当执行 `git submodule update` 遇到问题或者需要了解 `--deinit` 的作用时,可以从以下几个方面入手: #### 1. **理解 `--deinit` 选项** `git submodule deinit` 是用于移除本地子模块的工作树而不删除其配置项的操作。它不会影响远程仓库中的子模块定义,也不会从 `.gitmodules` 文件中移除条目[^2]。 运行此命令后,子模块的内容会被清理掉,但仍可以在后续重新初始化并检出该子模块。如果仅希望临时禁用某个子模块而不想完全删除它的记录,则这是一个非常有用的工具。 #### 2. **解决子模块更新过程中可能遇到的问题** ##### (a) **子模块处于非分支提交状态** 有时,在尝试更新子模块时可能会发现它们停留在某特定的 SHA 而不是跟踪任何分支。这种情况下应该进入对应的子模块目录手动切换至所需分支再拉取最新改动: ```bash cd path/to/submodule git checkout main git pull ``` 上述操作能够确保子模块同步到了最新的主线版本上[^1]。 ##### (b) **处理版本冲突** 对于存在冲突的子模块可以通过如下方式来解决问题: - 查找哪些子模块有冲突情况:`git submodule status` - 进入发生冲突的具体子模块内部: ```bash cd conflicted-submodule-name git fetch origin git reset --hard origin/main ``` 这里假设目标分支为主干(`main`);实际应用需依据项目设定调整相应名称。 另外也可以通过强制覆盖当前副本的方式快速消除差异(注意这样会丢失本地修改): ```bash git checkout origin/main -- . git commit -m "Conflict resolved by overwriting local changes." ``` ##### (c) **大文件存储优化** 针对包含大量二进制数据或其他大型资源的情况,可启用部分克隆功能减少带宽消耗以及磁盘占用量: ```bash git config submodule.<submodule-path>.partialclone true git submodule update --filter=blob:none ``` 这条指令告诉Git只获取元数据而非实体内容除非特别请求加载这些对象。 #### 3. **结合使用 `update` 和 `--deinit` 命令** 虽然单独提供了一个专门用来销毁工作拷贝的方法即`deinit`,但在某些场景下我们也许想先卸载后再刷新整个环境这时就可以连贯地写出这样的脚本流程: ```bash # Unregister and clean up existing submodules. git submodule deinit -f . # Remove all cached information about previous states of those modules. rm -rf .git/modules/* # Reinitialize everything according to latest definitions found within parent repo's configuration files (.gitsubmodules). git submodule init && git submodule update --recursive ``` 以上步骤首先清除了现有的所有子模块实例及其关联缓存接着按照新的规范重建链接关系从而达到全面重置的效果. --- ### 示例代码片段展示如何自动化管理过程 下面给出一段简单的Shell函数帮助用户一键完成常见维护动作包括但不限于初始化、清除旧态及最终同步等环节: ```shell #!/bin/bash function manage_git_submodules() { echo "Deinitializing current state..." git submodule deinit -f . echo "Cleaning leftover metadata..." rm -rf .git/modules/* echo "Re-fetching updated references as per latest configs..." git submodule init echo "Updating actual contents recursively now!" git submodule update --recursive } manage_git_submodules ``` 保存这段脚本为比如叫做`refreshSubmods.sh`之后赋予执行权限即可随时调用了. ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值