鱼C论坛

 找回密码
 立即注册
查看: 1363|回复: 2

还有一个地方不懂

[复制链接]
发表于 2023-11-13 19:08:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. int m,n;
  5. const int N=2e5+10;
  6. int a[N];
  7. void putin()
  8. {
  9.     cin>>n>>m;
  10.     for(int i=0;i<n;i++)
  11.     {
  12.         cin>>a[i];
  13.     }
  14. }
  15. bool check(ll k)
  16. {
  17.     ll res =1,cnt=0; //res表示行数
  18.     for(int i=0;i<n;i++)
  19.     {
  20.         if(a[i]>k)return 0; // 9 5 2 8  10 16 18
  21.         else if(a[i]+cnt+1<=k)cnt+=a[i]+1;
  22.         else if(cnt+a[i]<=k) res++,cnt=0; //表示到了26没有空格
  23.         else res++,cnt=a[i]+1;//表示这段放不下需要另外启动一行,
  24.         

  25.     }
  26.     return res-(!cnt)<=m; //以res=1开始的,如果没有
  27.    

  28. }
  29. void min()
  30. {
  31.     ll l=0,r=1e15;
  32.     while(l<r)
  33.     {
  34.         ll mid=l+r>>1;
  35.         if(check(mid))r=mid;
  36.         else l=mid+1;
  37.     }
  38.     cout<<r<<endl;

  39. }
  40. int main()
  41. {
  42.     ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
  43.     putin();
  44.     min();
  45.    
  46. }
复制代码

为什么return res-(!cnt)<=m;为什么要减去取反的cnt呢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-13 19:09:00 | 显示全部楼层
这段代码是在解决一个放置物品的问题,具体来说是将n个物品放入m个容量为k的容器中,要求使得所需的容器数量最少。在这段代码中,return res-(!cnt)<=m; 这行代码的作用是判断当前的容器数量res是否小于等于m。

其中,res表示当前已经使用的容器数量,而cnt表示当前容器中已经放置的物品的总体积。在这行代码中,!cnt表示如果cnt为0则取反为1,否则为0。这样做的目的是在cnt为0时,实际上是在判断res-1是否小于等于m,即表示当前容器数量减去一个空容器后是否小于等于m。

这是因为在放置物品时,如果当前容器已经放不下新的物品,需要另外启动一个新的容器,所以需要将res减1来判断是否小于等于m。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-13 19:11:20 | 显示全部楼层
在这段代码中,return res-(!cnt)<=m; 这一行是用来判断某个条件是否满足,并返回布尔值。

解释:
- res-(!cnt) 表示如果 cnt 为 0,则结果为 res-1,否则结果为 res
- <=m 表示判断前面的值是否小于等于 m

因此,整体来看,return res-(!cnt)<=m; 的意思是判断 res-1 是否小于等于 m,如果是则返回 true,否则返回 false

希望以上解答能够帮到你。如果还有其他问题,欢迎继续提问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-21 15:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表