牛客周赛 Round65 补题DEF

目录

D.医生

E.降温(easy))

F.降温(hard)


D.医生

思路:从范围来看m和k,可知我们可以将每一个字符串看成一个二进制数,将他们转换成十进制后,进行深度搜索,每种药有可选或不选两种情况,当搜到最后一种药时,我们只需将病人的十进制数与我们所选的药所组成的十进制数进行与运算,若最后结果与病人的十进制数相等,则说明我们所选的药包含病人的这些病,然后我们可以再加个剪枝,如果当前选的药数已经大于目前的最小值可以直接回溯。

Code:

cpp 复制代码
int n,m,ans;
int medicine[15],people[10005],k;

void dfs(int depth,int num,int medi,int id)
{
    if(num>=ans) return ;
    if(depth==k+1)
    {
        if((medi&people[id])==people[id]) 
        {
            ans=min(ans,num);
        }
        return ;
    }

    dfs(depth+1,num+1,medi|medicine[depth],id);
    dfs(depth+1,num,medi,id);

    return ;
}
void solve()
{
   cin>>n>>m;
   for(int i=1;i<=n;i++)
   {
    for(int j=1;j<=m;j++)
    {
        char c;cin>>c;
        int x=c-'0';
        if(x)
        {
            people[i]|=(1<<(m-j));
        }
    }
   }

   cin>>k;
   for(int i=1;i<=k;i++)
   {
    for(int j=1;j<=m;j++)
    {
        char c;cin>>c;
        int x=c-'0';
        if(x)
        {
            medicine[i]|=(1<<(m-j));
        }
    }
   }

   for(int i=1;i<=n;i++)
   {
       ans=1e18;
       dfs(1,0,0,i);
       if(ans==1e18) cout<<-1<<endl;
       else cout<<ans<<endl;
   }
}

E.降温(easy)

思路:贪心,只有当前一项比后一项大于等于x的时候才算寒潮,所以如果要使寒潮天数最大,我们要尽可能使ai变大,这样ai-ai+1>=x的概率才更大,如果第一个数为-999,则a1=50,其他数如果ai!=-999,ai-1-ai>=x则寒潮天数+1,如果ai=-999,若ai-1-x>=-50,则当ai=ai-1-x时寒潮天数增加,反之ai=50。求最小天数也一样,我们尽可能使ai-1-x超过-50这个边界,即ai尽可能小。

Code:

cpp 复制代码
constexpr int N=1005,mod=998244353;

int a[N],b[N],n,x;

void solve()
{
   cin>>n>>x;
   int ma=0;
   for(int i=1;i<=n;i++)
   {
    cin>>a[i];
    b[i]=a[i];
    if(i==1)
    {
        if(a[i]==-999)
        a[i]=50;
        continue;
    }
    if(a[i]!=-999)
    {
        if(a[i-1]-a[i]>=x)
            ma++;
    }
    else
    {
        if(a[i-1]-x>= -50) 
        {
            ma++;
           a[i]=a[i-1]-x;
        }
        else a[i]=50; 
    }  
   }
   cout<<ma<<' ';
   int mi=0;
   for(int i=1;i<=n;i++)
   {
    if(i==1)
    {
        if(b[i]==-999)
        b[i]=-50;
        continue;
    }
    if(b[i]!=-999)
    {
        if(b[i-1]-b[i]>=x) mi++;
    }
    else
    {
        if(b[i-1]-x >= -50)
        {
            b[i]=b[i-1]-x+1;
        }
        else b[i]=-50;
    }
   }
   cout<<mi;
}

F.降温(hard)

思路:与E题思路一样,改下数据范围即可。

Code:

cpp 复制代码
constexpr int N=1e5+5,mod=1e9+7,spj=-999999999;
constexpr int minn=-5*1e8,maxn=5*1e8;
int a[N],b[N],n,x;

void solve()
{
  cin>>n>>x;
  int ma=0;
  for(int i=1;i<=n;i++)
  {
    cin>>a[i];
    b[i]=a[i];
    if(i==1)
    {
        if(a[i]==spj)
        {
            a[i]=maxn;
        }
        continue;
    }
    if(a[i]!=spj)
    {
        if(a[i-1]-a[i]>=x) ma++;
    }
    else
    {
        if(a[i-1]-x>=minn)
        {
            a[i]=a[i-1]-x;
            ma++;
        }
        else a[i]=maxn;
    }
  }
  cout<<ma<<' ';
  int mi=0;
  for(int i=1;i<=n;i++)
  {
    if(i==1)
    {
        if(b[i]==spj)
            b[i]=minn;
        continue;
    }
    if(b[i]!=spj)
    {
        if(b[i-1]-b[i]>=x)
            mi++;
    }
    else
    {
        if(b[i-1]-x>=minn) b[i]=b[i-1]-x+1;
        else b[i]=minn;
    }
  }
  cout<<mi;
}
相关推荐
用户979984807182 小时前
200 行代码写一个能跑的 AI Agent:不依赖任何框架,只靠 tool-calling 原理
算法
threerocks2 小时前
【Muse实战】X 流量作战室搭建保姆级教程 - 拥有你自己的运营团队
算法
lvwangshu2 小时前
P12960 毒药 题解
动态规划·题解·贪心·技巧·性质题·思维好题
GreenTea2 小时前
深度拆解 ScienceBuddy:如何用“双层递归自进化”构建高可靠科研 Agent Harness
前端·后端·算法
花椒技术3 小时前
2.46 秒生成 5 秒视频:拆解 H3 Max 的模型、推理栈与硬件协同
算法·音视频开发·视频编码
vivo互联网技术3 小时前
ART:妆容迁移框架,重新定义高保真妆容迁移 | ECCV 2026
人工智能·算法·图像识别
codigger3 小时前
ObjectSense:一门千行内核、把可靠性写进骨子里的面向对象脚本语言
开发语言·编程·编程语言
用户0441440924493 小时前
卫星信号模拟器里的四个坐标转换公式
算法
橘和柠3 小时前
阿里 open-code-review (AI代码审查工具)实战:安装、四层规则链、自定义规则格式与实测避坑
算法·面试
得物技术3 小时前
别再只卷向量检索了,得物交易搜索如何用“生成式”实现召回范式跃迁?
人工智能·算法·llm