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

打卡信奥刷题(3427)用C++实现信奥题 P10192 [USACO24FEB] Moorbles S

P10192 [USACO24FEB] Moorbles S

题目描述

Bessie 和 Elsie 正在玩弹珠游戏。游戏的玩法如下:Bessie 和 Elsie 开始时各有一定数量的弹珠。Bessie 取出AAA个弹珠放在蹄子下,Elsie 猜测AAA是偶数还是奇数。如果 Elsie 猜对了,她从 Bessie 那里赢得AAA个弹珠,如果她猜错了,她输给 BessieAAA个弹珠(如果 Elsie 有少于AAA个弹珠,她就会输掉所有弹珠)。一名玩家失去所有弹珠时即失败。

游戏进行了一定回合后,Elsie 拥有NNN1≤N≤1091\le N\le 10^91N109)个弹珠。她感觉获胜很难,但她只是想不要输。在与 Bessie 玩得足够久之后,Elsie 对 Bessie 的习惯有了很好的了解,她发现在回合iii,Bessie 只可能会取出KKK1≤K≤41\le K\le 41K4)种不同数量的弹珠。距离 Bessie 感到无聊退出游戏只有MMM1≤M≤3⋅1051\le M\le 3\cdot 10^51M3105)个回合了。你能求出一个字典序最小的行动序列,使得无论 Bessie 如何选择,Elsie 都不会输吗?

输入格式

输入的第一行包含一个整数TTT1≤T≤101\le T\le 101T10),为测试用例的数量。每个测试用例的描述如下:

  • 第一行包含三个整数NNNMMMKKK,分别表示 Elsie 拥有的弹珠数量,回合数及 Bessie 可能进行的选择数。
  • 以下MMM行,第iii行包含KKK个不同的空格分隔的整数ai,1ai,2…ai,Ka_{i,1}a_{i,2}\ldots a_{i,K}ai,1ai,2ai,K1≤ai,j≤1031\le a_{i,j}\le10^31ai,j103),表示 Bessie 在回合iii可能取出的弹珠数量。

输入保证所有测试用例的MMM之和不超过3⋅1053\cdot 10^53105

输出格式

对于每一个测试用例,输出 Elsie 保证不输的字典序最小的行动序列,或者如果她会输则输出−1−11。行动序列输出在一行中,包含MMM个空格分隔的单词,每个单词为Even(偶)或Odd(奇)。

注意:Even的字典序小于Odd

输入输出样例 #1

输入 #1

2 10 3 2 2 5 1 3 1 3 10 3 3 2 7 5 8 3 4 2 5 6

输出 #1

Even Even Odd -1

输入输出样例 #2

输入 #2

1 20 8 2 3 5 3 5 3 5 3 5 3 5 3 5 3 5 3 5

输出 #2

Even Even Even Odd Even Odd Even Odd

说明/提示

样例解释 1

在第一个测试用例中,唯一字典序更小的行动序列是Even Even Even,但 Bessie 可以使 Elsie 输,通过先出555,将 Elsie 的弹珠数量从101010减少到555,然后再出333,将 Elsie 的弹珠数量从555减少到222,然后出333,这会输光她所有的弹珠。

如果 Elsie 采用正确的行动序列Even Even Odd,那么如果 Bessie 以同样的方式进行游戏,最后当她出333时,Elsie 将获得那333个弹珠,将她的弹珠数量增加到555。可以进一步证明,只要 Elsie 操作是Even Even Odd,Bessie 无法以其他的方式赢走 Elsie 的所有弹珠。

在第二个测试用例中,可以证明,对于 Elsie 可以选择的任何行动顺序,Bessie 都存在一种方式可以赢走 Elsie 的所有弹珠。

测试点性质

  • 测试点333M≤16M\le 16M16
  • 测试点4−64-646M≤1000M\le 1000M1000
  • 测试点7−127-12712:没有额外限制。

C++实现

#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intT,n,m,k,a[300005],b[300005],dp[300005],suf[300005];boolans[300005];signedmain(){cin>>T;while(T--){cin>>n>>m>>k;for(inti=1;i<=m;i++)a[i]=b[i]=-1e18;for(intj=1;j<=m;j++){for(inti=1,x;i<=k;i++){cin>>x;if(x%2==0)b[j]=max(b[j],-x),a[j]=max(a[j],x);elsea[j]=max(a[j],-x),b[j]=max(b[j],x);}}intsum=n;for(inti=1;i<=m;i++){if(a[i]>b[i])sum-=b[i],ans[i]=0;elsesum-=a[i],ans[i]=1;if(sum<=0)break;dp[i]=sum;}if(sum<=0){cout<<-1<<endl;continue;}suf[m]=dp[m];for(inti=m-1;i>=1;i--)suf[i]=min(suf[i+1],dp[i]);inttot=0;for(inti=1;i<=m;i++){if(ans[i]==0)continue;inttmp=suf[i]+tot;tmp=tmp-b[i]+a[i];if(tmp>0)tot+=-b[i]+a[i],ans[i]=0;}for(inti=1;i<=m;i++){if(ans[i])cout<<"Odd"<<' ';elsecout<<"Even"<<' ';}puts("");}return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

http://www.jsqmd.com/news/1133743/

相关文章:

  • 基于微信小程序的校园食堂点餐订餐系统设计与实现
  • ResNet 残差块 2 种结构对比:Identity Block 与 Conv Block 的 3 大差异与适用场景
  • GearOS在汽车控制领域的应用:从理论到实践的完整解决方案
  • YOLOv5 菜品识别系统部署:从 PyTorch 到 ONNX 及 Web 服务 3 步集成
  • GitHub资源列表自动化维护:链接监控与README生成实战
  • 基于Django的景点印象服务管理系统设计与实现
  • UVa 628 Password
  • JMeter分布式性能测试实战:从架构原理到避坑指南
  • HSAK故障排查手册:常见问题分析与解决方案
  • ONNX Runtime 1.19 GPU 安装避坑:CUDA 12.x/11.x 版本精确匹配与 3 步验证法
  • Cantian connector for MySQL部署最佳实践:CentOS平台完整配置指南
  • 3种道路标线矢量化方案对比:传统几何法 vs 深度学习 vs 混合模型(实测数据)
  • Anthropic靠什么支撑Claude的算力?Capex调研
  • Canvas 完全指南:从基础绘图到高性能动画
  • TOTP双因素认证时钟同步原理与终极解决方案
  • 意识先在:重构通用人工智能的本源演化路径——驳文字优先的主流AGI开发范式
  • 从RAG到智能体:构建工程化Agentic RAG系统的完整指南
  • Seraphine深度指南:如何用Python构建安全的英雄联盟战绩查询工具
  • 鸿蒙物理 108 篇 第七十一篇 五行物化嬗变规律
  • 如何快速上手MLCacheDirect?从安装到基本使用的完整指南
  • 构建企业级AI Agent:从概念到实践,打通数据孤岛实现智能自动化
  • 矿山透明化管控核心:井下室外一体化视频孪生三维重建技术详解
  • UVa 627 The Net
  • 百度网盘解析工具终极指南:三步实现全速下载的免费方案
  • 复杂异形檐口铝板幕墙安装技术
  • uos-network-exporter社区贡献指南:如何参与开源项目开发与维护
  • Fable 5代理编码的瓶颈转移 地图领土与四类未知的系统拆解
  • XUnity.AutoTranslator:如何用5分钟为Unity游戏添加智能翻译功能
  • geo-coding错误处理与调试:常见问题排查与解决方案大全
  • 终极指南:深入理解 chaosArsenal - Linux系统可靠性测试的革命性工具