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

【题解】成外友谊赛

T1 舞蹈机器⼈

题目大意:
给一个可以向四个方向移动的小点,对于每次移动,如果上或下⽅向进⾏了⼀次移动,那么,下⼀次就只能往左或右⽅向进⾏⼀次移动,反之亦然。
求该点可以到达的位置数量。

STEP 1.

对于这个问题,我们可以想到一种非常暴力且优雅的 DFS 解法:

void dfs(int x,int y,int towards,int step){if(x < 0 || x >= n || y < 0 || y >= m) return; // 越界if(step==n){arr[x][y]++; // 到达位置}if(towards==0){ // 左右dfs(x-1,y,1,step+1);dfs(x+1,y,1,step+1);}else{ // 上下dfs(x,y-1,0,step+1);dfs(x,y+1,0,step+1);}
}
int main(){/*其他内容*/dfs(501,501,0,0); //从中间开始dfs(501,501,1,0);int ans=0;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(arr[i][j]) ans++; // 统计到达位置的数量}}cout<<ans;return 0;
}

喜提 \(60\space pts\)!

STEP 2.

言归正传,这其实是一道数学题。

对于 \(n\) 为偶数时,对于整个的移动过程⽽⾔,每两次移动就相当于是在正⽅形的对⻆线上移动了⼀次(即斜着⾛了⼀步),我们可以发现其能够到达的地方其实就是一个边长为 \(n/2+1\) 的正方形。

例如,在 \(n=4\) 时,图中所标记的蓝色点即为可到达的点

img

对于 \(n\) 为奇数时,我们可以发现其能够到达的地方其实就是两个长为 \(n/2+1\) 宽为 \(n/2+2\) 的长方形构成的。

img

STEP 3.

因此,我们可以根据 \(n\) 的奇偶性,来获得最终答案

\( ans=\begin{cases} (n/2+1)^2&n\space mod\space 2=0\\ 2\times(n/2+1)\times(n/2+2)&n\space mod\space 2=1 \end{cases} \)

代码
#include<bits/stdc++.h>
using namespace std;
int main(){int n;cin>>n;if(n&1){ // n 为奇数cout<<2*(n/2+1)*(n/2+2);}else{ // n 为偶数cout<<(n/2+1)*(n/2+1);}return 0;
}
http://www.hskmm.com/?act=detail&tid=33268

相关文章:

  • 小程序商城客服系统
  • ubuntu 主机创建虚拟 ip,应对容器内部配置了宿主固定 ip,宿主迁移网络环境后容器报错
  • 2025权威报告:微信编辑器排版Top 10工具推荐(全链路解决方案)
  • 洛谷 P10149
  • 从0到1构建企业数据资产 - 智慧园区
  • 2025.10.17
  • 一行代码清空所有 docker 容器的日志文件
  • 塔吊施工 “隐形风险” 克星!思通数科 AI 卫士精准识别核心部件隐患
  • ubuntu配置vsftpd
  • 时序数据库 Apache IoTDB 等你“打卡”!2025 OSCAR 开源产业大会完整版议程揭晓
  • 2024 CCPC Final F
  • vue
  • Windows关闭端口占用
  • 洛谷 P12865
  • ubuntu清理内存缓存
  • ubuntu常用技巧
  • 10.17 CSP-S模拟33 改题记录
  • 包装类(基本数据类型对应的引用数据类型)
  • luogu P7915 [CSP-S 2021] 回文
  • USACO 绿-蓝 思维题小记
  • Day16-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\classlei
  • 一个实用的短视频脚本创作指令分享
  • 字典树 Trie 乱讲
  • redis和mysql之间的数据一致性
  • ubuntu允许root登录桌面系统
  • 24. 两两交换链表中的节点
  • AI协科学家:技术革命还是安全噩梦?
  • 一个决定
  • 10月17日
  • npm镜像配置