hihoCoder #1106 : Koch Snowflake 微软苏州校招笔试(1月17日)
描述
Koch Snowflake is one of the most famous factal. It is built by starting with an equilateral triangle, removing the inner third of each side, building another equilateral triangle at the location where the side was removed, and then repeating the process indefinitely.
Let Kn be the Koch Snowflake after n-th iteration. It is obvious that the number of sides of Kn, Nn, is 3*4n. Let's number the sides clockwisely from the top of Koch Snowflake.
Let si,n be the i-th side of Kn. The generation of si,n is defined as the smallest m satifying si,n is a part of the sides of Km. For example, in the above picture, the yellow sides are of generation 0; the blue sides are of generation 1; the red sides are of generation 2.
Given a side si,n, your task is to calculate its generation.
输入
The input contains several test cases.
The first line contains T(T <= 1000), the number of the test cases.
The following T lines each contain two numbers, i(1 <= i <= 10^9) and n(0 <= n <= 1000). Your task is to calculate the generation of side si,n.
输出
For each test case output the generation of the side.
样例输入
5
1 0
1 1
2 1
10 2
16 3
样例输出
0
0
1
2
0
题目大意
给定一个三角形,每经过一次迭代,每一条边变成4条小一点的边。告诉你迭代的次数,以及边的编号,求该条边是第几次迭代出现的边。
解题思路
本题是一道数学题,用找规律的方法即可解决。
我们先来观察一下一条边在两次迭代之前的变化情况:
其中黄线为我们选中的一条边,我们并不知道它是第几次迭代产生的边。蓝线是第n次迭代后产生的新边,因此其代数为n。
假设迭代前的边为原图形中第i条边,那么迭代后对应的新图形中第4(i-1)+1 .. 4(i-1)+4这四条边。
在新的四条边中,我们可以知道4(i-1)+2和_4(i-1)+3_这两条边一定是当前迭代产生新边。同时我们可以根据其序号,算出原来的i。
由此我们可以得到结论,对于第n
次迭代后的第k
条边,若:
k mod 4 == 2或3
:则该边一定是第n次迭代产生的新边;k mod 4 == 0或1
:则该边不是第n次迭代产生的新边,且该边在第n-1次迭代中对应的是第ceil(k/4)
条边。(ceil
为上取整函数)
利用这个性质,对于给定的k
和n
,我们先判定第k
条边是否是第n
次迭代产生的新边。若是,则直接返回n
;否则我们根据第二条性质,计算出的新的k' = ceil(k/4)
,n' = n - 1
,再次代入进行计算。
我们可以写出这个递归的程序:
calc(k, n):
If (n == 0) Then
Return 0; // 若n = 0时,该边一定属于初始图形
End If
If (k mod 4 == 2 or k mod 4 == 3) Then
Return n;
End If
Return calc(ceil(k/4), n - 1);
得到了该函数,本题也就迎刃而解了。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <ctime>
#include <map>
#include <set>
using namespace std;
#define lowbit(x) (x&(-x))
#define max(x,y) (x>y?x:y)
#define min(x,y) (x<y?x:y)
#define MAX 100000000000000000
#define MOD 1000000007
#define pi acos(-1.0)
#define ei exp(1)
#define PI 3.141592653589793238462
#define INF 0x3f3f3f3f3f
#define mem(a) (memset(a,0,sizeof(a)))
typedef long long ll;
ll gcd(ll a,ll b){
return b?gcd(b,a%b):a;
}
const int N=;
const int mod=1e9+;
int t,i,n;
int main()
{
scanf("%d",&t);
while(t--){
scanf("%d %d",&i,&n);
while(n!=){
if(i%==||i%==) break;
i=i/+i%;
n--;
}
printf("%d\n",n);
}
return ;
}
hihoCoder #1106 : Koch Snowflake 微软苏州校招笔试(1月17日)的更多相关文章
- hihoCoder #1094 : Lost in the City(枚举,微软苏州校招笔试 12月27日 )
#1094 : Lost in the City 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi gets lost in the city. He ...
- hihocoder #1094 : Lost in the City微软苏州校招笔试 12月27日 (建图不大【暴力枚举】 子图的4种形态 1Y )
#1094 : Lost in the City 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi gets lost in the city. He ...
- hihocoder #1103 : Colorful Lecture Note微软苏州校招笔试 1月10日(字符串处理+栈)
#1103 : Colorful Lecture Note 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi is writing an algorit ...
- Hihocoder #1095 : HIHO Drinking Game (微软苏州校招笔试)( *【二分搜索最优解】)
#1095 : HIHO Drinking Game 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi and Little Ho are playin ...
- SQL点滴6—“微软不认识闰年2月29日”&字符"N"的作用
原文:SQL点滴6-"微软不认识闰年2月29日"&字符"N"的作用 http://www.cnbeta.com/articles/50580.htm这个 ...
- 苏州Uber优步司机奖励政策(1月11日~1月17日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- [Hihocoder 1289] 403 Forbidden (微软2016校园招聘4月在线笔试)
传送门 #1289 : 403 Forbidden 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi runs a web server. Someti ...
- 【hiho一下第77周】递归-减而治之 (MS面试题:Koch Snowflake)
本题是一道微软面试题,看起来复杂,解出来会发现其实是一个很简单的递归问题,但是这道题的递归思路是很值得我们反复推敲的. 原题为hihocoder第77周的题目. 描述 Koch Snowflake i ...
- 【内推】2020微软苏州Office365众多核心团队热招150+研发精英!欢迎推荐
2020微软苏州Office365众多核心团队热招150+研发精英!欢迎推荐 大家好,目前微软Office365核心团队在美丽宜居的苏州有150多的社招职位虚位以待,欢迎大家自荐,推荐,转发!除以下列 ...
随机推荐
- 报错解决——Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
在导入tensorflow后,进行运算时,出现了报错Your CPU supports instructions that this TensorFlow binary was not compile ...
- sqlserver2008出现数据库主体在该数据库中拥有架构,无法删除的解决方案
当要删除数据库中的某个用户名的时候会报错 出现数据库主体在该数据库中拥有架构,无法删除的解决方案(MicrosoftSQLServer,错误:15138) 和sql server2000不同 第一:这 ...
- mac chrome 浏览器开启允许跨域
在控制台输入下面代码: open -n /Applications/Google\ Chrome.app/ --args --disable-web-security --user-data-dir ...
- python的static方法和class方法
class Caculator(object): name = "caculator" def __init__(self, x, y): self._x = x self._y ...
- Scala集合(一)
Scala集合的主要特质 Iterator,用来访问集合中所有元素 val coll = ... // 某种Iterable val iter = col.iterator while(iter.ha ...
- HBase 数据迁移方案介绍 (转载)
原文地址:https://www.cnblogs.com/ballwql/p/hbase_data_transfer.html 一.前言 HBase数据迁移是很常见的操作,目前业界主要的迁移方式主要分 ...
- 浪潮IOT知识点
1 新增身份定义 以及 身份定义的属性表 要注意增加路由 2 '@trident/core'; 飘红,解决办法 import { TableSearchComponent } from '@t ...
- node—基础命令
1.安装node,在任意文件夹下按shift键选中“在此处打开PowerShell窗口”或者直接在开始菜单输入cmd启动 2.常用命令: c: 如果我们想访问c盘,那么我们需要在命令行中输入c:就行了 ...
- Extjs event domain 研究
Listeners and Event Domains In Ext JS 4.2, the MVC event dispatcher was generalized with the introdu ...
- 前端的icon处理
http://fontawesome.io/ 发现CSS也可以生成icon