棋盘覆盖

时间限制:3000 ms  |  内存限制:65535 KB
难度:3

描述

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

图1

图2

输入
第一行m表示有m组测试数据;
每一组测试数据的第一行有一个整数数k;
输出
输出所需个数s;
样例输入
3
1
2
3
样例输出
1
5
21
 1 /* 功能Function Description:     NYOJ-45
 2    开发环境Environment:          DEV C++ 4.9.9.1
 3    技术特点Technique:
 4    版本Version:
 5    作者Author:                   可笑痴狂
 6    日期Date:                      20120821
 7    备注Notes:
 8    本题求的是大数(4^k-1)/3,可以转化为首项为1,公比为4的等比数列的前k项的和
 9    把除法转化为加法和乘法。
10 */
11 #include<stdio.h>
12 #include<string.h>
13
14 void mult(int *tmp,int num,int &bit)
15 {
16     int t=0;
17     for(int i=0;i<bit;++i)
18     {
19         t=tmp[i]*num+t;
20         tmp[i]=t%10;
21         t/=10;
22     }
23     if(t)
24     {
25         tmp[bit]=t;
26         ++bit;
27     }
28 }
29
30 void add(int *sum,int *tmp,int &bit)
31 {
32     int i,t=0;
33     for(i=0;i<bit;++i)
34     {
35         sum[i]+=tmp[i];
36         sum[i+1]+=sum[i]/10;
37         sum[i]%=10;
38     }
39     if(sum[i])
40         ++bit;
41 }
42
43 int main()
44 {
45     int k,T,i,bit;
46     int tmp[100]; //存放每一项的值
47     int sum[100]; //存放结果
48     scanf("%d",&T);
49     while(T--)
50     {
51         memset(tmp,0,sizeof(tmp));
52         memset(sum,0,sizeof(sum));
53         scanf("%d",&k);
54         tmp[0]=1;
55         sum[0]=1;
56         bit=1;
57         for(i=1;i<k;++i)
58         {
59             mult(tmp,4,bit);
60             add(sum,tmp,bit);
61         }
62         for(i=bit-1;i>=0;--i)
63             printf("%d",sum[i]);
64         printf("\n");
65     }
66     return 0;
67 }

NYOJ-45 棋盘覆盖相关推荐

  1. NYOJ 45 棋盘覆盖

    以为是分治法那个经典的例子,一看题才知道是大数 棋盘覆盖 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 在一个2k×2k(1<=k<=100)的棋盘中恰有一 ...

  2. JAVA大数_棋盘覆盖

    第一道: 传送门:NYOJ 45 棋盘覆盖 2^k*2^k=4^k,其实就是大数计算,-1后取3的倍数.问题本源出自<计算机算法设计与分析>的棋盘覆盖问题,原始解法是分治法,递推出公式f( ...

  3. [算法][递归] 棋盘覆盖

    >_<: 问题描述: 在一个2k×2k 个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘.在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖 ...

  4. 递归与分治之棋盘覆盖问题

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

  5. 计算机基础算法棋盘覆盖,分治算法求解棋盘覆盖问题互动教学过程.doc

    分治算法求解棋盘覆盖问题互动教学过程 分治算法求解棋盘覆盖问题互动教学过程 摘要:针对算法设计与分析课程难度较大.对学生编程能力要求较高的现状,通过对棋盘覆盖问题的分治算法求解过程进行互动教学设计,引 ...

  6. 棋盘覆盖问题原理及演示程序

    说明:文章内容源自电子工业出版社<计算机算法设计与分析>一书. 演示程序由本人完成,新手请多指教! 在一个2^k * 2^k个方格组成的棋盘中,若恰有一个方格与其它方格不同,则称该方格为一 ...

  7. java棋盘问题_0x03大数问题(JAVA解决棋盘覆盖,A+B Problem II)

    常见的有棋盘覆盖和A+B问题,这类问题牵扯到的数值都比较大,如果用一般的数值类型,肯定输出不了,所以就要想一个办法,怎么把大数转换一下输出. A+B Problem II 时间限制:3000 ms | ...

  8. 算法设计棋盘覆盖问题c语言,棋盘覆盖问题(用分治法求解)

    // 棋盘覆盖 #include #include int Board[8][8]={0};//定义棋盘并初始化棋盘 void ChessBoard(int tr,int tc,int dr,int ...

  9. 算法设计与分析——递归与分治策略——棋盘覆盖

    问题描述 棋盘覆盖问题要求在2^k * 2^k 个方格组成的棋盘中,你给定任意一个特殊点,用一种方案实现对除该特殊点的棋盘实现全覆盖. 建立模型如图: 解决方案就是利用分治法,将方形棋盘分成4部分,如 ...

最新文章

  1. 比较全面的gdb调试命令
  2. 专注,专注,还是专注
  3. rpm包管理功能全解
  4. Apache配置文件的帮助查询
  5. springboot(三):Spring boot中Redis的使用
  6. 无人机图像处理工具-亮度、对比度、饱和度调整/匀光匀色/图像去雾
  7. 07 总结ProgressDialog 异步任务
  8. 干点大事!“覆盖25万人的AI资源对接平台”发布,找人、找技术不再难!
  9. 中油C语言第一次在线作业,中石油华东《程序设计(C语言)》2020年春季学期在线作业(二)...
  10. 设计师必备各类型3D字体图层样式PSD素材
  11. 华为交换机模拟器_从零开始学习华为路由交换 | 配置缺省静态路由
  12. mysql循环建表_MySQL 开发准则(总结自阿里巴巴开发手册)
  13. python opencv3 —— findContours
  14. safari里的touch事件解析
  15. 网页编码_Python获取网页编码(apparent_encoding)
  16. C语言面试部分知识点整理总结
  17. rpc服务器不可用自动重启,出现RPC服务器不可用的解决方法
  18. Java程序员 面试如何介绍项目经验? Java程序员应该如何介绍自己的项目经验和自我介绍?面试如何突出自己
  19. 十一长假我肝了这本超硬核PDF,现决定开源!!
  20. Python —— 列表的while循环遍历 、for循环遍历

热门文章

  1. centos 7 防火墙和端口配置
  2. 2.3线性表的链式存储和运算—双向链表
  3. hadoop家族的各个成员
  4. Wayland 源码解析之代码结构
  5. String类中IndexOf与SubString
  6. JAVA项目中classpath路径详解
  7. MYSQL的函数有哪些?(4.2时间与日期函数)
  8. JAVA:说说你对序列化的理解
  9. 硬件基础:理解串口通信以及232,485,422常见问题
  10. Shell重定向的概念笔记