欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 牛客周赛 Round65 补题DEF

牛客周赛 Round65 补题DEF

2025/6/15 5:03:24 来源:https://blog.csdn.net/2302_79372568/article/details/143509934  浏览:    关键词:牛客周赛 Round65 补题DEF

目录

D.医生

 E.降温(easy)

 F.降温(hard)


D.医生

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

Code:

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的时候才算寒潮,所以如果要使寒潮天数最大,我们要尽可能使a[i]变大,这样a[i]-a[i+1]>=x的概率才更大,如果第一个数为-999,则a[1]=50,其他数如果a[i]!=-999,a[i-1]-a[i]>=x则寒潮天数+1,如果a[i]=-999,若a[i-1]-x>=-50,则当a[i]=a[i-1]-x时寒潮天数增加,反之a[i]=50。求最小天数也一样,我们尽可能使a[i-1]-x超过-50这个边界,即a[i]尽可能小。

Code:

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:

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;
}

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词