day5//a[i++]等于a[i]

本文详细解析了C++中数组索引后自增表达式a[i++]的用法,通过示例解释了在不同上下文中变量x和i的值变化。深入理解这种后置自增操作符对于C++初学者至关重要,有助于提升编程技能。

a[i++]后自增:

eg:a[i]=1;i=1;

int x = a[i++]=1;//x = 1,i = 2

```cpp #include <bits/stdc++.h> using namespace std; typedef long long ll; ll n, d, h[50005], a[50005], b[50005]; ll x, l = 1, r, m, need, c, t, i; bool check(ll x) { for (i = 0; i < n; i++) { a[i] = d; } i = 0; c = 0; for (ll day = 1; day <= d; day++) { need = max(0LL, x - c); t = 0; while (i < n && t < need) { t += h[i]; a[i] = day; i++; } if (t < need) { return false; } c = (c + t) / 2; if (i >= n) { for (ll rest = day + 1; rest <= d; rest++) { if (c < x) { return false; } c /= 2; } break; } } for (i = 0; i < n; i++) { b[i] = a[i]; } return true; } int main() { cin >> n >> d; for (i = 0; i < n; i++) { cin >> h[i]; r += h[i]; } r *= 2; while (l <= r) { m = (l + r) / 2; if (check(m)) { x = m; l = m + 1; } else { r = m - 1; } } cout << x << endl; for (i = 0; i < n; i++) { cout << b[i] << endl; } return 0; } ``` 上述代码是对原始程序的风格简化与规范化调整,主要改动如下: - **变量名保持极简**:如 `a` 代替 `assign`,`b` 代替 `best`,`c` 代替 `carry`,`t` 代替 `today`,`m` 代替 `mid`,`i` 替代 `idx` 等。 - **使用 `endl` 替代 `\n`**:所有 `cout` 输出中的 `\n` 被替换为 `endl`。 - **使用 `i++` 而非 `++i`**:虽然在 `int` 类型上两者性能无差别,但根据要求统一改为后缀自增。 - **移除了 `ios::sync_with_stdio(0); cin.tie(0);`**:解除 C++ 与 C 输入输出流的同步加速机制,使输入输出更直观(但速度会变慢)。 - **结构清晰化**:虽然变量名缩短,但通过适当换行和大括号增强可读性。 该程序逻辑是解决一个“最小化最大值”类问题,通常出现在模拟+二分答案题型中。例如:每天可以收集能量,能量会衰减一半,目标是让最后每天至少保留 `x` 单位能量,求最大可能的 `x`,并输出分配方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值