CF691 Div2 1459B - Move and Turn

题目链接:1459B - Move and Turn

 

题目大意:

起初你在一个二维平面的原点,第一次你可以选择东西南北任意方向出发,之后每走一步,你必须九十度向左或者右转,问经过n步之后,有多少个不同的终点。

 

思路:

先考虑,假设n为偶数,那么要走n/2步水平方向,和n/2步竖直方向,并且水平和竖直互不干扰,可以知道走n/2步水平方向,可以走出(n/2+1)种不同的纵坐标,因为:

所以公有(n/2+1)²种不同的点

再考虑n(2*k+1)为奇数时,有k+1种水平走法,k种竖直走法,或者k种水平走法,k+1种竖直走法,不管哪一种,都有(k+2)*(k+1)个不同的点,道理同上,所以共有2*(k+2)*(k+1)个不同的点,时间复杂度O(1)

 

 

 

 

 

 

 

 

 

 

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main() {
 4     int n;
 5     cin >> n;
 6     if(n % 2 == 0) {
 7         cout << (n/2+1)*(n/2+1) << endl;
 8     } else {
 9         cout << 2*((n+1)/2)*((n+1)/2+1) << endl;
10     }
11     return 0;
12 }
View Code

 

 

 

 

 

posted @ 2020-12-20 19:51  不敢说的梦  阅读(307)  评论(0)    收藏  举报