牛客周赛 Round 69
1.牛客练习赛872.牛客小白月赛373.牛客IOI周赛28-普及组4.牛客竞赛数据结构专题班树状数组、线段树练习题5.小笨的蓄水池
6.牛客周赛 Round 69
7.牛客周赛 Round 718.牛客周赛 Round 729.牛客周赛 Round 7310.2025牛客寒假算法基础集训营111.2025牛客寒假算法基础集训营212.2025牛客寒假算法基础集训营313.2025牛客寒假算法基础集训营414.2025牛客寒假算法基础集训营515.2025牛客寒假算法基础集训营616.牛客寒假训练营赛后总结17.牛客小白月赛11018.牛客周赛 Round 8219.牛客周赛 Round 84(选讲题解
赛时做题
A
入门题
等差数列,找公差,构造第三个即可
B
题意简单,考察字符串转化成数字
C
几何题,大概初中难度,用全等或者向量都可以(初做时废了半天劲,果然上了大学就废了
赛后补题
D
纯暴力,但是可以收获的有两点
- 将二维转化成一维处理
- bitset的使用和二进制操作
__builtin_popcount(i)返回i的二进制数中有多少个1
#include<bits/stdc++.h>
using namespace std;
int n,m,q;
bitset<49>b[9];//设置多少位的二进制数
bitset<49>a;
int ans;
int main(){
cin>>n>>m>>q;ans=q+1;
for(int k=0;k<=q;++k){
string s,x;
for(int i=1;i<=n;++i){//将矩阵转化成一维
cin>>x;
s+=x;
}
b[k]=bitset<49>(s);
}
int check=0;
for(int i=0;i<(1<<q);++i){
if(__builtin_popcount(i)>=ans) continue;
bitset<49>c;
for(int j=0;j<q;++j)
if((i>>j)&1){
c|=b[j+1];
}
if((c|b[0])==(1ll<<(m*n))-1 && (c&b[0])==0){
ans=__builtin_popcount(i);
check=i;
}
}
if(ans==q+1) ans=-1;
cout<<ans<<endl;
if(ans!=-1){
for(int i=0;i<q;++i){
if(check>>i&1){
cout<<i+1<<" ";
}
}
}
return 0;
}
收获
对于多个东西,只存在选与不选的关系,可以试着用二进制数来表达,第几个方案被选,第几位就是1
这种操作经常用到,因为这样枚举更加方便
E
值得学习的点:
对前缀和的精妙使用,还有前驱后驱的利用
从暴力的思想逐渐优化:
暴力找第一个点 ,找到后找第二个切割点(统计共有多少个点可以)
优化:
-
判断区间内正数个数,也用前缀和
-
(第二步用后缀和就可以优化)
-
判断切割点用前缀和判断区间和是否满足要求
#include<bits/stdc++.h>
using namespace std;
int n;
const int maxn=2e5+10;
int f[maxn];//后缀和 统计i点之后有多个合法的(可以切成全部和的1/3且有正数的)切割点
int nt[maxn];//后驱 i点及以后的第一个正数的位置(下标)
int ne[maxn];//前缀和统计正数的个数
long long sum[maxn];//前缀和
int a[maxn];
int main(){
cin>>n;
for(int i=1;i<=n;++i){
cin>>a[i];
sum[i]=sum[i-1]+a[i];
ne[i]=ne[i-1]+(a[i]>0);//正数个数的前缀和
}
if(sum[n]%3){//不能均分
puts("0");
return 0;
}
nt[n+1]=n+1;
for(int i=n;i>=1;--i){
f[i]=f[i+1]+(sum[n]-sum[i-1]==sum[n]/3 && ne[n]-ne[i-1]);//i点之后 合法的第二个切割点总数
nt[i]=a[i]>0?i:nt[i+1];//下一个正数的位置
}
long long ans=0;
for(int i=1;i<=n;++i){
if(sum[i]==sum[n]/3 && ne[i]){//找第一个切割点
int t=nt[i+1];
if(t<n)ans+=f[t+1];
}
}
cout<<ans<<endl;
return 0;
}
本文作者:归游
本文链接:https://www.cnblogs.com/guiyou/p/18568313
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步