poj3889 fractal streets
2024-08-30 12:46:19
分形街道
我干,这个毒瘤。
想起来就头痛。
首先看题就是一大难题......
说一下题目大意吧。
每当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代码
最新文章
- 【杂记】JavaScript篇
- TYVJ P1001 第K极值 Label:水
- ASP.NET MVC5学习笔记之Controller同步执行架构分析
- 翻译:用Javascript的Function构造器伪造上下文 by Ben Nadel
- 求给定数据中最小的K个数
- Jsoup解析Html教程
- linux中找不到/etc/sysconfig/iptables
- 【转载】Retina屏的移动设备如何实现真正1px的线?
- HTML——元素
- python-三级菜单-67
- https协议详解
- HTML5 加密和摘要算法(base64,md5, sha1,rsa)
- Day 5-7 exec 和元类的创建.
- Faster rcnn代码理解(1)
- Windows本机搭建Redis
- OGG 12.3中支持系统procedure复制的几点说明
- MySQL 中 utf8 和 utf8mb4 的使用以及字符集相关(原文优秀,必读)
- keystone v3.0与2.0的区别
- javascript的toString深入探究
- 怎么使用ABBYY中的Bates编号
热门文章
- java &; jdk
- mysql第一天【mysqldump导出数据和mysql导入数据】
- sqlmap-学习1 配置环境
- 所活天数!java Date应用
- nginx反向代理(动静分离)
- Spring Boot 构建电商基础秒杀项目 (三) 通用的返回对象 &; 异常处理
- Vue学习目录
- name设置id的方式 解决多个单选域冲突现象 同时有利于从动态网页取值
- 基于 vue+vue-router+vuex+axios+koa+koa-router 本地开发全栈项目
- 21JDBC_事务&;JDBCTemplate