当前位置: 首页 > news >正文

2024北京市赛补题

原题链接
好难…用的技巧和算法很多

K 贪心 桶


直观想 每次最小的乘二 乘二就是左移 每次把最高位最小的乘二
枚举二进制位 把所有数整到一个最高二进制位上 如果还有剩的k就同步变大 用桶维护最高二进制位 2e5*30

vector<int>b[40];voidsolve(){intn,k;cin>>n>>k;vector<int>a(n+1);// ,b(n+1,0);forr(i,1,n){cin>>a[i];}forr(i,1,n){inttp=a[i],cnt=0;while(tp){cnt++;tp>>=1;}b[cnt].push_back(a[i]);}intans=0,sm=0;forr(i,0,30){sort(b[i].begin(),b[i].end());if(b[i].size()==n){inttm=k/n;k%=n;intpsm=0,ssm=0;forr(j,0,k-1)(psm+=b[i][j]%mod)%=mod;forr(j,k,b[i].size()-1)(ssm+=b[i][j]%mod)%=mod;(ans+=(psm*qpow(2,tm+1)%mod+ssm*qpow(2,tm)%mod)%mod)%=mod;break;}for(autox:b[i]){if(k>0)b[i+1].push_back(x<<1),k--;elseb[i+1].push_back(x);}if(k==0){forr(j,i+1,30){for(autox:b[j])(ans+=x%mod)%=mod;}break;}}cout<<ans<<endl;/* int ans=0,pre=0,id=n; forr(i,1,n-1){ int dis=b[i+1]-b[i]; cout<<dis<<' '<<k<<endl; (ans+=a[i])%=mod; if(dis>0){ int sft=min(k,dis*i); k-=sft; (ans*=qpow(2,sft))%=mod;// 合并成一块了 不知道其中如何分配 } if(k==0){ id=i; break; } } forr(i,id,n)ans+=a[i]; (ans*=qpow(2,k))%=mod; cout<<ans<<endl; */// int ans=0,psm=0,ssm=0;// forr(i,1,k)(psm+=a[i])%=mod;;// forr(i,k+1,n)(ssm+=a[i])%=mod;// ans= (qpow(2,tm+1)*psm%mod+qpow(2,tm)*ssm%mod)%mod;// cout<<ans<<endl;}

D LCA找两点之间的路径 判断点是否在路径上


如果本次点在相邻两点的路径上 那么这个点不是目标经典
用LCA找两点间路径

constintN=2e5+10,M=1e5;constdoublePI=acos(-1),eps=1e-7;constlonglongmod=1e9+7,inf=2e18;intn,m,q;intfa[N][35],dep[N];intb[N];vector<int>g[N];voiddfs(intnow,intf){// O(nlogn)fa[now][0]=f;dep[now]=dep[f]+1;for(inti=1;(1<<i)<=dep[now];i++){fa[now][i]=fa[fa[now][i-1]][i-1];}for(autox:g[now]){if(x==f)continue;dfs(x,now);}}intLCA(intx,inty){if(dep[x]<dep[y])swap(x,y);reforr(i,0,20){if(dep[fa[x][i]]>=dep[y])x=fa[x][i];}if(x==y)returnx;reforr(i,0,20){if(fa[x][i]!=fa[y][i]){x=fa[x][i],y=fa[y][i];}}returnfa[x][0];}boolisanc(intx,inttar){// 确定tar是否为x的祖先reforr(i,0,20){if(dep[fa[x][i]]>=dep[tar])x=fa[x][i];// x上跳}returnx==tar;}boolcheck(intp){// 判断now是不是目标景点 是1 不是0/* now是目标景点:不在相邻两点的路径上 */if(p==1||p==m)return1;// 不是两边都有点 不能确定是路过的点 那就算作目标景点intlp=b[p-1],rp=b[p+1],now=b[p];// 看now是否在lp rp的路上intf=LCA(lp,rp);if(dep[f]>dep[now])return1;//now比f深度浅 now不可能在路上// dep[f]<=dep[now] now可能在路上// lp rp 通过f连成一条路 如果now在路上 now是lp或rp的一个祖先if(isanc(lp,now)||isanc(rp,now))return0;elsereturn1;}voidsolve(){cin>>n>>m>>q;forr(i,1,n-1){intu,v;cin>>u>>v;g[u].push_back(v);g[v].push_back(u);}dfs(1,0);forr(i,1,m)cin>>b[i];intans=0;forr(i,1,m)ans+=check(i);while(q--){intp,w;cin>>p>>w;// 一个点和相邻两点状态相关// 消除原来的状态if(p-1>=1)ans-=check(p-1);if(p+1<=m)ans-=check(p+1);ans-=check(p);//添加新的状态b[p]=w;if(p-1>=1)ans+=check(p-1);if(p+1<=m)ans+=check(p+1);ans+=check(p);cout<<ans<<endl;}}
http://www.jsqmd.com/news/716374/

相关文章:

  • 汽车连杆加工工艺及夹具课程设计
  • 自托管AI助手Web界面:基于Next.js与WebSocket的OpenClaw私有化部署指南
  • 实时直播翻译神器:用Stream-Translator打破语言壁垒
  • 抖音批量下载工具实战指南:3步实现高效无水印内容获取
  • Qwen3-4B-Thinking开源可部署优势:模型权重完全可控可审计
  • 保姆级教程:用清华镜像在Win10和Ubuntu22上快速搞定QT6.7在线安装(含常见错误修复)
  • 3343. 统计平衡排列的数目
  • python学习笔记 | 7.5、高级特性-迭代器
  • CIMPro孪大师如何实现多源数据融合?
  • 如何将微信聊天记录永久保存?WeChatMsg免费开源工具完全指南
  • 为什么Chrome用户需要这个3合1图片格式转换扩展?
  • 保姆级教程:用Uni-App + Vue + uView UI 从零搭建一个可拖拽的小程序页面编辑器
  • 英雄联盟回放播放器ROFL-Player:终极免费工具完整使用指南
  • 深度精读:Segment Anything(SAM)
  • 揭开光学材料的神秘面纱:3000+材料折射率数据库完全指南
  • Voxtral-4B-TTS-2603可部署:支持企业内网离线部署的多语言TTS解决方案
  • 告别复杂OCR:OpenDataLab MinerU智能文档理解,3步搞定PDF转文本
  • 【收藏级】2026年大模型入门到精通全解析|小白程序员必看,从AI演进到实战就业一站式指南
  • Yokogawa F3BU06-0N 控制器背板
  • 5分钟学会AI实时翻译工具:免费为直播添加多语言字幕
  • 14份精选资源包,每一份都值得收藏健康 · 成长 · AI · 教育 · 英语 · 考公
  • 2026年山东大学软件学院创新项目实训博客-项目博客(一)
  • 深圳压力型白发养黑机构推荐 黑奥秘AI智能检测,白发改善效果可视化 - 美业信息观察
  • 高校科研团队首选:MinerU学术论文解析部署案例分享
  • DeOldify模型Web端交互设计:使用JavaScript实现实时拖拽上色预览
  • 收藏|2026最新AI Agent行业全景解析,程序员小白必学转型必修课
  • 实测分享:Fish-Speech-1.5生成语音效果,自然度超乎想象
  • MediaCreationTool.bat终极指南:5分钟掌握Windows系统部署自动化
  • 打破城通网盘速度限制:ctfileGet如何实现10倍下载加速的技术揭秘
  • 如何高效解决MoviePilot中的115网盘风控问题:STRM方案与智能限流实战指南