Codeforces Round #338 (Div. 2) E. Hexagons(规律)
来源:互联网 发布:f9源码论坛 编辑:程序博客网 时间:2024/05/02 21:32
题意:
给定一个六边形坐标系统,从(0,0)出发,走环,求N≤1018步的坐标
分析:
显然,路径是一个环套一个环,下一个环插入了6个新的六边形,f(n)=f(n−1)+6,f(0)=1
首先先二分确定之前有多少环,然后求余数r
每个环的走法,都是6个方向,每个方向的步数是x(第x个环)
假设从(2x,0)出发,作为虚拟的第0步,我们可以通过变换规律求得r步的坐标
当然如果r=0,坐标就是(2×(x−1),0)
代码:
//// Created by TaoSama on 2016-01-09// Copyright (c) 2015 TaoSama. All rights reserved.//#pragma comment(linker, "/STACK:1024000000,1024000000")#include <algorithm>#include <cctype>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iomanip>#include <iostream>#include <map>#include <queue>#include <string>#include <set>#include <vector>using namespace std;#define pr(x) cout << #x << " = " << x << " "#define prln(x) cout << #x << " = " << x << endlconst int N = 1e5 + 10, INF = 0x3f3f3f3f, MOD = 1e9 + 7;typedef long long LL;LL n;int d[][2] = {{ -1, 2}, { -2, 0}, { -1, -2}, {1, -2}, {2, 0}, {1, 2}};int main() {#ifdef LOCAL freopen("C:\\Users\\TaoSama\\Desktop\\in.txt", "r", stdin);// freopen("C:\\Users\\TaoSama\\Desktop\\out.txt","w",stdout);#endif ios_base::sync_with_stdio(0); while(scanf("%I64d", &n) == 1) { LL l = 1, r = 1e9; while(l <= r) { LL m = l + r >> 1; if(3 * m * (m + 1) <= n) l = m + 1; else r = m - 1; } n -= 3 * l * (l - 1); if(!n) {printf("%I64d 0\n", l - 1 << 1, 0); continue;} LL x = l << 1, y = 0; for(int i = 0; i < 6; ++i) { LL k = min(n, l); x += k * d[i][0]; y += k * d[i][1]; n -= k; } printf("%I64d %I64d\n", x, y); } return 0;}
0 0
- Codeforces Round #338 (Div. 2) E. Hexagons(规律)
- Codeforces Round #338 (Div. 2) E. Hexagons 找规律
- Codeforces 615E Hexagons (Round #338 (Div. 2) E题) 二分答案+找规律
- [Codeforces 615E] Hexagons (找规律)
- Codeforces 615E Hexagons 【找规律】
- Codeforces Round #133 (Div. 2) A. Tiling with Hexagons(数学)
- CF 615 E Hexagons(找规律)
- CodeForces - 630D Hexagons! (数学规律)
- Codeforces--630D--Hexagons(规律)
- CodeForces 615E Hexagons
- Codeforces Round #264 (Div. 2)C(找规律)
- Codeforces Round #277 (Div. 2)---A. Calculating Function (规律)
- Codeforces Round #327 (Div. 2) C. Median Smoothing(规律)
- Codeforces Round #340 (Div. 2) D. Polyline(规律)
- Codeforces Round #377 (Div. 2) C. Sanatorium(规律乱搞)
- Codeforces Round #392 (Div. 2) B. Blown Garland(规律)
- Codeforces Round #440 (Div. 2,)-数学&规律- Maximum splitting
- Codeforces 405E Codeforces Round #238 (Div. 2)E
- Linux 启动过程
- 【贪心算法】:背包问题
- 数据库优化方案
- 关于Linux下s、t、i、a权限
- Redis
- Codeforces Round #338 (Div. 2) E. Hexagons(规律)
- android数据存储方式之二 文件存储:内部存储
- 【贪心算法】:活动记录问题
- Python 爬虫学习稿(一)
- 从今天起开始写文章了
- 那些年,我们一起看的毛片
- Android Studio中的mipmap和drawable
- 讲讲博主的第一个项目
- 【贪心法】:人民币找钱问题