C. Gourmet Cat(Mod思维题)

在这里插入图片描述在这里插入图片描述
题意:就是给你a,b,c,表示不同类的的各自数量;
然后第一个食物在1,4,7吃一个单位,第二个食物在2,6吃一个单位,第三种食物在3,5吃一个单位;
问:从1–7中选一天出来开始旅行,保证在下一天遇到的食物能有存储来吃,问在这种能连续吃的情况下最长的天数;
其实可以列一下表:
比如:
在这里插入图片描述
其实一看这个就是f:r:c==3:2:2,那么我算一个最小周期不就对了吗?然后剩下的就在一个循环里面就可以了;
所以我取min(f/3,min(r/2,c/2));
但是剩下的f,r,c应该怎么办?枚举?怎么枚举?
我一直没想到结果有人取个Mod就OK了,这就有点巧妙了;而且还能保持连续;
其实我一开始对剩下的f,r,c是这样想的:
在这里插入图片描述
复制一份加到后面相当于循环了;但是我一直不知道怎么枚举;
QAQ;
然后看了大佬的代码;我才发现可以这样编号来枚举:
在这里插入图片描述
取个mod7就可以了;
AC代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
     ll a,b,c;
     scanf("%lld %lld %lld",&a,&b,&c);
     ll Min=min(a/3,min(b/2,c/2));
     ll ans=Min*(3+2+2);
     a-=Min*3;
     b-=Min*2;
     c-=Min*2;
     ll f=a,r=b,cc=c;
     ll Max=0,t=0;
     for(int i=1;i<=7;i++){
            t=0;
            f=a;r=b;cc=c;
        for(int j=0;j<=6;j++){
            int tt=(i+j)%7;
            if(tt==0||tt==1||tt==4){
                  if(f){
                      f--;t++;
                  }else break;
            }
            if(tt==2||tt==6){
                  if(r){
                     r--;t++;
                  }else break;
            }
            if(tt==3||tt==5){
                if(cc){
                   cc--;t++;
                }else break;
            }
        }
        Max=max(t,Max);
     }
     printf("%lld\n",ans+Max);
   return 0;
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值