棋盘覆盖

描述

在一个2k×2k(1<=k<=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的2×2方格(图2为其中缺右下角的一个),去覆盖2k×2k未被覆盖过的方格,求需要类似图2方格总的个数s。如k=1时,s=1;k=2时,s=5

 
输入
第一行m表示有m组测试数据;
每一组测试数据的第一行有一个整数数k;
输出
输出所需个数s;
样例输入
3
1
2
3
样例输出
1
5
21

错误答案:   读完题后,首先就想到可以用 num = (2^k * 2^k - 1) / 3,轻松算出答案。于是就有了下面的程序,写完后才发现,这个题有坑!2^100次方这个数已经超过了整数变量的最大值,这个题应该用大数算法。

using namespace std;
int main()
{
int time, k;
cin >> time;
int nums[time];
int i = time;
while (i--) {
cin >> k;
nums[i] = (( << k) * ( << k) - ) / ;
}
i = time;
while(i--) {
cout << nums[i] << endl;
}
return ;
}

大数算法,简单说就是用数组来存储数值。而相应的进位等计算操作就需要手动编写。利用数组进行大数的加减乘等操作相对简单,但是除法就麻烦多了。num = (2^k * 2^k - 1) / 3利用这个公式来算大数,显然不太明智。所以我们需要找到更好算法,充分利用计算机的循环操作。

num = (^ * ^ - ) /  =  = ^ + ^ + ^ + ^
num = (^ * ^ - ) / = = ^ + ^ + ^
num = (^ * ^ - ) / = = ^ + ^
num = (^ * ^ - ) / = = ^

大家不用我说就能发现里面的规律了吧。利用这个公式就可以避免除以3的计算。

j = k - 1

num = 2^(2*j) + 2^(2*j-2) + …… + 2^0

num = (((2^2 + 1) * 2^2 + 1) * 2^2 + 1) * 2^2 + 1

可以进一步转换公式,变换成利于循环操作

然后结合数组存储大数的方法就可以得到下面的程序

#include<iostream>
#include<string.h>
using namespace std; int main()
{
int sum;
cin >> sum;
int total[sum][];
int n = sum;
while(n--)
{
int *a = total[n];
memset(a, , * sizeof(int));
int size;
cin >> size;
a[] = ;
int i, j, k;
for(i = ;i <= size; ++i)
{
for(j = ; j < ; ++j)
a[j] = * a[j];
a[]++;
for(j = ; j < ; ++j)
{
a[j+] += a[j] / ;
a[j] = a[j] % ;
}
}
}
// 输出
n = sum;
while(n--)
{
int i, j;
int *a = total[n];
for(i = ; i >= ; --i)
if(a[i])
break;
for(j = i; j >= ; --j)
cout << a[j];
cout << endl;
}
return ;
}

另一种思路:

如果这个题不是求L型方格的数量,而且让你绘制出摆放方格后的棋盘呢。这就变成了另外一个题,而相应的算法也完全不同。这里就需要运用分治算法。

棋盘覆盖(一) ACM的更多相关文章

  1. 【ACM】棋盘覆盖 - 大数除

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

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

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

  3. NYOJ 45 棋盘覆盖

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

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

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

  5. NYOJ 45 棋盘覆盖 模拟+高精度

    题意就不说了,中文题... 小白上讲了棋盘覆盖,于是我就挖了这题来做. 棋盘覆盖的推导不是很难理解,就是分治的思想,具体可以去谷歌下. 公式就是f(k) = f(k - 1) * 4 + 1,再化解下 ...

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

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

  7. CODEVS 2171 棋盘覆盖

    2171 棋盘覆盖 给出一张nn(n<=100)的国际象棋棋盘,其中被删除了一些点,问可以使用多少12的多米诺骨牌进行掩盖. 错误日志: 直接在模板上调整 \(maxn\) 时没有在相应邻接表数 ...

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

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

  9. JavaScript编写棋盘覆盖

    一.前言 之前做了一个算法作业,叫做棋盘覆盖,本来需要用c语言来编写的,但是因为我的c语言是半桶水(哈哈),所以索性就把网上的c语言写法改成JavaScript写法,并且把它的覆盖效果显示出来 二.关 ...

随机推荐

  1. CentOS6.5固定IP方式上网(NAT)

    使用NAT模式 虚拟机网络连接使用NAT模式,物理机网络连接使用Vmnet8.如果没有重置一下即可 虚拟机设置里面--网络适配器,网络连接选择NAT模式. 虚拟机菜单栏-编辑-虚拟网络编辑器,选择Vm ...

  2. 搭建Node.js开发IDE环境WebStrom5 多图

    1.下载前期准备 node.js下载地址 http://nodejs.org/ WebStrom5下载地址: http://download-ln.jetbrains.com/webide/WebSt ...

  3. 使用OpenFiler来模拟存储配置RAC中ASM共享盘及多路径(multipath)的测试

    第一章 本篇总览 之前发布了一篇<Oracle_lhr_RAC 12cR1安装>,但是其中的存储并没有使用多路径,而是使用了VMware自身提供的存储.所以,年前最后一件事就是把多路径学习 ...

  4. js 计算月/周的第一天和最后一天

    因为项目开发中遇到需要向后台传本周的开始和结束时间,以及上一周的起止时间,就琢磨了半天,总算写出来一套,写篇文章是为了方便自己记忆,也是分享给需要的人,水平有限,写的不好请见谅: getDateStr ...

  5. Python抓取百度百科数据

    前言 本文整理自慕课网<Python开发简单爬虫>,将会记录爬取百度百科"python"词条相关页面的整个过程. 抓取策略 确定目标:确定抓取哪个网站的哪些页面的哪部分 ...

  6. js阻止表单提交的两种方法

    下面直接看代码. <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  7. Professional C# 6 and .NET Core 1.0 - 38 Entity Framework Core

    本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - 38 Entity Framework ...

  8. jstl__报错

    1.缺少JAR:解决的办法就是手动将jstl.jar和 standard.jar这两个jar包加入到web项目的WEB-INF/lib目录中或者是把jstl.jar.standard.jar复制到to ...

  9. maven 配置安装

    1.下载maven http://maven.apache.org/   2.windows安装maven 解压包后配置环境变量 PATH:%M2_HOME%\bin M2_HOME:D:\soft\ ...

  10. Eval与Bind的区别

    bind和eval都是ASP.NET中的函数,而且都有对将数据获取到Html中的功能.那么,它们在使用的时候有什么区别呢?在我们编程的时候,在某种情况下,用哪个函数更加合适呢? 区别 用法: 1. b ...