题意就不说了,中文题。。。

小白上讲了棋盘覆盖,于是我就挖了这题来做。

棋盘覆盖的推导不是很难理解,就是分治的思想,具体可以去谷歌下。

公式就是f(k) = f(k - 1) * 4 + 1,再化解下就是4^0 + 4^1 + 4^2 + ... + 4^(n-1)。

思路很简单,但是题目没想象中的简单,刚开始天真的用递归模拟了下就交上去,立马wa掉。。。

发现即使用Long long类型,n到32就挂了 +_+。。。

于是实在不是很懂,难道一定要用高精度吗?贵了好久,最后只得找到一篇题解来理解,顺便学了一下万进制,很神奇的高精度~

虽然跪了,但收获还是蛮大的。看讨论里面说数据只有100,表示不想作弊。。。

代码:

 /*
* Author: illuz <iilluzen[at]gmail.com>
* Blog: http://blog.csdn.net/hcbbt
* File: 45.cpp
* Lauguage: C/C++
* Create Date: 2013-08-31 19:39:38
* Descripton: nyoj 45, cheesboard coverage, wan jin zhi
*/
#include <cstdio> const int MAXN = 100;
int a[MAXN]; // 万进制,每位存4进制 int main() {
int n, m, c;
scanf("%d", &n);
while (n--) {
scanf("%d", &m);
if (m == 1) {
printf("1\n");
continue;
}
a[0] = 1;
int t = 0; // 已经用到第几位
for (int i = 1; i < m; i++) {
c = 0; // c为进位数
for (int j = 0; j <= t; j++) {
a[j] = a[j] * 4 + c;
c = a[j] / 10000;
a[j] %= 10000;
}
if (c != 0) {
t++;
a[t] = c;
}
a[0]++;
}
// 处理最后的进位,其实就是99999999这种情况,这里可以不用
// for (int j = 0; j <= t; j++) {
// c = a[j] / 10000;
// a[j] %= 10000;
// }
// if (c != 0) {
// t++;
// a[t] = c;
// }
printf("%d", a[t]);
for (int i = t - 1; i >= 0; i--)
printf("%04d", a[i]);
printf("\n");
}
return 0;
}

NYOJ 45 棋盘覆盖 模拟+高精度的更多相关文章

  1. NYOJ 45 棋盘覆盖

    棋盘覆盖 水题,题不难,找公式难 import java.math.BigInteger; import java.util.Scanner; public class Main { public s ...

  2. nyoj 45-棋盘覆盖 (高精度, Java)

    棋盘覆盖 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 在一个2k×2k(1<=k<=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的 ...

  3. 递归与分治策略之棋盘覆盖Java实现

    递归与分治策略之棋盘覆盖 一.问题描述 二.过程详解 1.棋盘如下图,其中有一特殊方格:16*16 . 2.第一个分割结果:8*8 3.第二次分割结果:4*4 4.第三次分割结果:2*2 5.第四次分 ...

  4. 用python代码编写象棋界面,棋盘覆盖问题

    编写象棋界面 import turtle t=turtle.Pen() t.speed(100) def angle(x,y): t.penup() t.goto(x+3,y+3) t.pendown ...

  5. bzoj 2706: [SDOI2012]棋盘覆盖 Dancing Link

    2706: [SDOI2012]棋盘覆盖 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 255  Solved: 77[Submit][Status] ...

  6. 棋盘覆盖(大数阶乘,大数相除 + java)

    棋盘覆盖 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 在一个2k×2k(1<=k<=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的 ...

  7. hdu 1316 How Many Fibs? (模拟高精度)

    题目大意: 问[s,e]之间有多少个 斐波那契数. 思路分析: 直接模拟高精度字符串的加法和大小的比較. 注意wa点再 s 能够从 0 開始 那么要在推断输入结束的时候注意一下. #include & ...

  8. 棋盘覆盖(一) ACM

    棋盘覆盖 描述 在一个2k×2k(1<=k<=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的2×2方格(图2为其中缺右下角的一个),去覆盖2k×2k未被覆盖过的方格,求 ...

  9. 棋盘覆盖问题(算法分析)(Java版)

    1.问题描述: 在一个2k×2k个方格组成的棋盘中,若有一个方格与其他方格不同,则称该方格为一特殊方格,且称该棋盘为一个特殊棋盘.显然特殊方格在棋盘上出现的位置有种情形.因而对任何 k≥0,有4k种不 ...

随机推荐

  1. DLNA_百度百科

    DLNA_百度百科 DLNA

  2. RegisterHotKey注册热键,然后响应WM_HOTKEY消息

    MSDN中的一个示例代码,步骤就是RegisterHotKey注册热键,然后响应WM_HOTKEY消息 @1:这个是系统热键 #include "stdafx.h" int _cd ...

  3. 贪心算法-找零钱(C#实现)

    找零钱这个问题很清楚,无非就是始终拿可以取的最大面值来找,最后就使得张数最小了,这个实现是在假设各种面值足够多的情况下. 首先拖出一个界面来,最下面是一个listbox控件 对应的代码:问题比较简单, ...

  4. java thread reuse(good)

    I have always read that creating threads is expensive. I also know that you cannot rerun a thread. I ...

  5. Android 增量更新实例(Smart App Updates)

    原地址:http://my.oschina.net/liucundong/blog/160436 官方说明 实现原理 实现 (1)生成差异包 (2)使用旧apk+差异包,在客户端合成新apk 注意事项 ...

  6. currentstyle和getComputedStyle兼容问题

    currentStyle:获取计算后的样式,也叫当前样式.终于样式. 长处:能够获取元素的终于样式,包含浏览器的默认值,而不像style仅仅能获取行间样式,所以更经常使用到. 注意:不能获取复合样式如 ...

  7. AccountManager使用教程

    API解读 这个类给用户提供了集中注冊账号的接口.用户仅仅要输入一次账户password后,就能够訪问internet资源. 不同的在线服务用不同的方式管理用户,所以account manager 为 ...

  8. gradle多模块开发(转)

    参考文档:gradle的官方userguide.pdf文档的chapter 55和chapter 56.gradle的多模块或项目开发一定不会比maven差,在我看来!大的项目分成多个模块来开发是常事 ...

  9. poj2777--Count Color(线段树,二进制转化)

    Count Color Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 34950   Accepted: 10542 Des ...

  10. UVA 10140 - Prime Distance(数论)

    10140 - Prime Distance 题目链接 题意:求[l,r]区间内近期和最远的素数对. 思路:素数打表,打到sqrt(Max)就可以,然后利用大的表去筛素数.因为[l, r]最多100W ...