news 2026/6/15 1:16:29

打卡信奥刷题(2534)用C++实现信奥 P2039 [AHOI2009] 跳棋

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
打卡信奥刷题(2534)用C++实现信奥 P2039 [AHOI2009] 跳棋

P2039 [AHOI2009] 跳棋

题目描述

在一个111NNN列(NNN是奇数)的棋盘上,有KKK个格子是红色的。这种情况下,你有一个跳棋在最左端的格子上。你的目标是将它移动到最右边的格子,在开始移动之间,你可以在棋盘的任意空位上放棋子。在游戏开始后 你只可以随时在一个红色格子上放棋子。棋子的移动规则是:每次只可以选择一个棋子,跳过与之相邻的棋子走到后面的空格上,被它跳过的棋子被吃掉,即从棋盘上移走,如相邻棋子的另一侧有棋子,则不能跳。

请回答以下两个问题:

  1. 移动开始前至少要放多少棋子才能完成任务。
  2. 如果要使开始前放的棋子数要求尽量少,那么在移动过程中最少需要放多少个棋子才能完成任务。

关于规则的补充说明:

  1. 只能往空位上放棋子,不管是移动开始前还是移动过程中。
  2. 移动前棋盘最左端的那个原始棋子绝对不能被吃掉。

输入格式

第一行一个正奇数NNN

第二行有NNN个整数,如果第iii个整数是111,说明第iii个格子是红色格子,否则为白色格子。

数字间用空格分开。

输出格式

两行,每行一个整数分别代表第一问和第二问的结果。

输入输出样例 #1

输入 #1

5 0 0 0 1 0

输出 #1

1 1

说明/提示

在游戏开始前,可以在第二个格子上放上一个棋子,游戏开始后可用最左边的棋子吃掉它,从而移动到第三格。然后由于第四格是个红色的格子,在游戏中可以在那放一个棋子,然后用已经移动第三格的棋子把它吃掉,从而达到终点。

100%100\%100%的数据中,1≤N≤10001\le N\le 10001N1000,输出中的数字不超过101510^ {15}1015

30%30\%30%的数据中,N≤20N\le 20N20

Source: [Ahoi2009] checker

C++实现

#include<stdio.h>#include<stdlib.h>#definemaxn1005#defineINF1e18#defineLLlonglongLL n,q[maxn],num[2];LL dp[maxn];LLmin(LL a,LL b){returna<b?a:b;}voidprint(boolflag){//输出函数if(!flag){printf("%lld\n%lld",num[0],num[1]);exit(0);//直接结束程序}LL ans=0;for(inti=1;i<=n;i++)ans+=(i%2)?0:dp[i];//只有偶数点才计入答案printf("%d\n%lld",0,ans);}intmain(){boolflag=false;scanf("%lld",&n);for(LL i=1;i<=n;i++){scanf("%lld",&q[i]);if(i==1){q[i]=0;//起点的红点没有用,故赋值为 0,作为白点处理continue;}if(i%2==0)num[q[i]]++;if(q[i]&&q[i-1])flag=true;}for(inti=1;i<=n;i++)dp[i]=q[i]?1:INF;for(inti=3;i<=n;i++)if(q[i]&&q[i-1]){for(intj=i-2;j>=1;j--)dp[j]=min(dp[j],dp[j+1]+dp[j+2]);//跳棋向左边跳for(intj=i+1;j<=n;j++)dp[j]=min(dp[j],dp[j-1]+dp[j-2]);//跳棋向右边跳}print(flag);return0;}

后续

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 13:06:51

Spark Store deb打包实战指南:从入门到精通

Spark Store deb打包实战指南&#xff1a;从入门到精通 【免费下载链接】星火应用商店Spark-Store 星火应用商店是国内知名的linux应用分发平台&#xff0c;为中国linux桌面生态贡献力量 项目地址: https://gitcode.com/spark-store-project/spark-store 还在为Linux应用…

作者头像 李华
网站建设 2026/6/15 12:39:22

通达信智能kdj 源码

{}N:9;M1:3;M2:3; {KDJ} RSV:(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100; K:SMA(RSV,M1,1); D:SMA(K,M2,1); J:3*K-2*D; 顶轴:105, POINTDOT; 上轴:90, POINTDOT; 下轴:10, POINTDOT; 底轴:0, POINTDOT; 抢钱轴:-10, POINTDOT; DRAWTEXT(CROSS(J,顶轴) ,100,大出), COLO…

作者头像 李华
网站建设 2026/6/15 14:16:40

Lucy Edit AI:用文字重新定义视频编辑的智能革命

Lucy Edit AI&#xff1a;用文字重新定义视频编辑的智能革命 【免费下载链接】Lucy-Edit-Dev 项目地址: https://ai.gitcode.com/hf_mirrors/decart-ai/Lucy-Edit-Dev 在数字内容创作飞速发展的今天&#xff0c;视频编辑正经历一场前所未有的技术变革。DecartAI推出的L…

作者头像 李华
网站建设 2026/6/15 14:11:41

7个关键策略:构建下一代移动应用动态配置与实验框架

7个关键策略&#xff1a;构建下一代移动应用动态配置与实验框架 【免费下载链接】awesome-ios-architecture :japanese_castle: Better ways to structure iOS apps 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-ios-architecture 移动应用功能控制已成为现代应…

作者头像 李华
网站建设 2026/6/15 12:40:04

ChartDB数据库可视化终极指南:5分钟学会多数据库统一管理

ChartDB数据库可视化终极指南&#xff1a;5分钟学会多数据库统一管理 【免费下载链接】chartdb Database diagrams editor that allows you to visualize and design your DB with a single query. 项目地址: https://gitcode.com/GitHub_Trending/ch/chartdb 还在为不同…

作者头像 李华
网站建设 2026/6/15 12:37:48

数据分析师的基本功总结

1. 数据分析的“套路”&#xff1a;核心步骤全解析数据分析就像是侦探破案&#xff0c;需要遵循一套严谨的流程&#xff0c;才能从纷繁复杂的数据中找到线索&#xff0c;最终得出结论。这个过程&#xff0c;我们可以总结为以下六个核心步骤&#xff1a;1.1. 明确目标&#xff1…

作者头像 李华