分形街道

我干,这个毒瘤。

想起来就头痛。

首先看题就是一大难题......

说一下题目大意吧。

每当n+1时,把n阶图复制为4份。2*2排好。

右边两个不动。左上顺时针旋转90°,左下逆时针旋转90°

求n阶图中a和b的直线距离。

考虑递归解决:这TM怎么递归啊!!!

仿佛可以......我一开始带了十多个变量,后来缩减到了8个,自觉很ok了

标答带了两个变量。我:................

我们不管标答,继续钻研中国特色射惠主义。

然后我以为每次旋转完之后内部遍历顺序不会变,于是自信WA了。

仔细钻研:发现方向朝向一样的时候,遍历顺序是一样的。我:什么垃圾题。

分16种情况大力讨论A了。

 /**
poj 3889
*/
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long LL;
// 1 0 3 2 3 2 1 0 1 0 1
// 0 k 2 1 2 3 0
// 3 1 2 1 0 3 0 3 2 3 2
void solve(LL& x, LL& y, LL T, LL a, int n, int k, LL now_x, LL now_y)
{
//printf("solve: T:%I64d a:%I64d n:%d k:%d now_x:%I64d now_y:%I64d ", T, a, n, k, now_x, now_y);
if(n==)
{
//printf("\n");
x = now_x;
y = now_y;
return;
}
LL len = 1ll << (n - );
LL s = len * len;
int now_area = (T - a) / s, now_k, area;
//printf("now_area:%d\n", now_area);
LL d[][];
d[][] = now_x;
d[][] = now_y;
d[][] = now_x;
d[][] = now_y + len;
d[][] = now_x + len;
d[][] = now_y + len;
d[][] = now_x + len;
d[][] = now_y; /*
3
1 1 2
2 1 16
3 4 33 */
if(k == ) {
if(now_area == ) {
area = ;
now_k = ;
}
else if(now_area == ) {
area = ;
now_k = ;
}
else if(now_area == ) {
area = ;
now_k = ;
}
else {
area = ;
now_k = ;
}
}
else if(k == ) {
if(now_area == ) {
area = ;
now_k = ;
}
else if(now_area == ) {
area = ;
now_k = ;
}
else if(now_area == ) {
area = ;
now_k = ;
}
else {
area = ;
now_k = ;
}
}
else if(k == ) {
if(now_area == ) {
area = ;
now_k = ;
}
else if(now_area == ) {
area = ;
now_k = ;
}
else if(now_area == ) {
area = ;
now_k = ;
}
else {
area = ;
now_k = ;
}
}
else {
if(now_area == ) {
area = ;
now_k = ;
}
else if(now_area == ) {
area = ;
now_k = ;
}
else if(now_area == ) {
area = ;
now_k = ;
}
else {
area = ;
now_k = ;
}
}
solve(x, y, T, a + now_area * s, n - , now_k, d[area][], d[area][]);
return;
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
int n;
LL a, b;
scanf("%d%I64d%I64d", &n, &a, &b);
LL x=,y=;
solve(x, y, a, , n, , , );
LL xx=,yy=;
solve(xx, yy, b, , n, , , );
//printf("%I64d %I64d \n", x, y);
//printf("%I64d %I64d \n", xx, yy);
printf("%.0lf\n", * sqrt((double)((xx - x) * (xx - x) + (yy - y) * (yy - y))));
}
return ;
}

AC代码

最新文章

  1. 【杂记】JavaScript篇
  2. TYVJ P1001 第K极值 Label:水
  3. ASP.NET MVC5学习笔记之Controller同步执行架构分析
  4. 翻译:用Javascript的Function构造器伪造上下文 by Ben Nadel
  5. 求给定数据中最小的K个数
  6. Jsoup解析Html教程
  7. linux中找不到/etc/sysconfig/iptables
  8. 【转载】Retina屏的移动设备如何实现真正1px的线?
  9. HTML——元素
  10. python-三级菜单-67
  11. https协议详解
  12. HTML5 加密和摘要算法(base64,md5, sha1,rsa)
  13. Day 5-7 exec 和元类的创建.
  14. Faster rcnn代码理解(1)
  15. Windows本机搭建Redis
  16. OGG 12.3中支持系统procedure复制的几点说明
  17. MySQL 中 utf8 和 utf8mb4 的使用以及字符集相关(原文优秀,必读)
  18. keystone v3.0与2.0的区别
  19. javascript的toString深入探究
  20. 怎么使用ABBYY中的Bates编号

热门文章

  1. java &amp; jdk
  2. mysql第一天【mysqldump导出数据和mysql导入数据】
  3. sqlmap-学习1 配置环境
  4. 所活天数!java Date应用
  5. nginx反向代理(动静分离)
  6. Spring Boot 构建电商基础秒杀项目 (三) 通用的返回对象 &amp; 异常处理
  7. Vue学习目录
  8. name设置id的方式 解决多个单选域冲突现象 同时有利于从动态网页取值
  9. 基于 vue+vue-router+vuex+axios+koa+koa-router 本地开发全栈项目
  10. 21JDBC_事务&amp;JDBCTemplate