题意:

给原始序列1

给定变化规则是,对于原来的序列每一个0前边插入1,每个1前边插入0.

问原始序列经过n次变化之后有多少对相邻的0.

规律题:

从第二次开始

当第奇数次变化之后,数量变成原来数量的两倍-1;

当第偶数次变化之后,数量变成原来数量的两倍+1;

但是由于数据2^1000次方太大,需要用到大数,屌丝还没学到java对大数的处理,所以只写了一个高精度。

/*************************************************************************
> File Name: C.cpp
> Author: ttpond
> Created Time: 2015-8-22 15:32:30
************************************************************************/
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<set>
using namespace std;
char dp[][];
void cal(int pos)
{
int len=strlen(dp[pos-]);
int mm[];
memset(mm,,sizeof(mm));
int tmp;
for(int i=;i<len;i++)
{
mm[i]+=(dp[pos-][i]-)*;
mm[i+]+=mm[i]/;
mm[i]=mm[i]%;
}
for(int i=;i<len+;i++)
{
dp[pos][i]=mm[i]+;
}
if(dp[pos][len]=='')
dp[pos][len]=;
}
void add(int pos)
{
int len=strlen(dp[pos]);
int tmp;
int mm[];
memset(mm,,sizeof(mm));
mm[]=;
for(int i=;i<len;i++)
{
mm[i]+=dp[pos][i]-;
mm[i+]=mm[i]/;
mm[i]=mm[i]%;
}
for(int i=;i<len+;i++)
{
dp[pos][i]=mm[i]+;
}
if(dp[pos][len]=='')
dp[pos][len]=;
}
void sub(int pos)
{
int len=strlen(dp[pos]);
int mm[];
memset(mm,,sizeof(mm));
mm[]=-;
for(int i=;i<len;i++)
{
mm[i]+=dp[pos][i]-;
if(mm[i]<)
{
mm[i]+=;
mm[i+]--;
}
}
for(int i=;i<len;i++)
{
dp[pos][i]=mm[i]+;
}
if(dp[pos][len-]=='')
dp[pos][len-]=;
}
int main()
{
memset(dp,,sizeof(dp));
dp[][]='';
dp[][]='';
dp[][]='';
bool st=;
for(int i=;i<=;i++)
{
cal(i);
if(!st)
{
add(i);
}
else
{
sub(i);
}
st=!st;
}
int n;
while(scanf("%d",&n)!=EOF)
{
int len=strlen(dp[n]);
for(int i=len-;i>=;i--)
{
printf("%c",dp[n][i]);
}
printf("\n");
}
}

HDU 1041的更多相关文章

  1. HDU 1041 Computer Transformation (简单大数)

    Computer Transformation http://acm.hdu.edu.cn/showproblem.php?pid=1041 Problem Description A sequenc ...

  2. hdu 1041 (OO approach, private constructor to prevent instantiation, sprintf) 分类: hdoj 2015-06-17 15:57 25人阅读 评论(0) 收藏

    a problem where OO seems more natural to me, implementing a utility class not instantiable. how to p ...

  3. HDU 1041 Computer Transformation

    这道题目的意思是:一开始有一个数字 1 ,在接下来的时间中,计算机会按照如下规则进行扩展:                0 –> 1 0                1 –> 0 1 ...

  4. HDU 1041 Computer Transformation(找规律加大数乘)

    主要还是找规律,然后大数相乘 #include<stdio.h> #include<string.h> #include<math.h> #include<t ...

  5. HDU 1041(01展开 大数)

    题意是将 1 展开成 01 ,将 0 展开成 10 ,问这样展开 n 次后序列中有多少对 0. 手写发现:0,1,1,3,5,11 ... 即 a[ i ] = a[ i -1 ] + a[ i - ...

  6. hdu 1041(递推,大数)

    Computer Transformation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/ ...

  7. HDU 1041 Computer Transformation 数学DP题解

    本题假设编程是使用DP思想直接打表就能够了. 假设是找规律就须要数学思维了. 规律就是看这些连续的0是从哪里来的. 我找到的规律是:1经过两次裂变之后就会产生一个00: 00经过两次裂变之后也会产生新 ...

  8. HDU——PKU题目分类

    HDU 模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 ...

  9. 【转载】图论 500题——主要为hdu/poj/zoj

    转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

随机推荐

  1. Java三大特性之封装

    .封装 1.概念:把对象的内部细节封闭起来,只提供操作对象属性的公共方法. 封装是面向对象编程语言对客观世界的模拟:如:电视机,她的内部元件就被封闭起来了,仅仅暴露电视机按钮来供人使用,这样就没有人能 ...

  2. flask 项目部分业务逻辑

    @passport_blu.route('/image_code') def get_image_code(): """ 生成图片验证码并返回 1. 取到参数 2. 判断 ...

  3. 前端什么是BFC

    什么是BFC? 全称块级格式化上下文?什么意思不懂.看了好多博客,基本都是抄的,真心都不是大白话.我今天来总结一下,用菜鸟级别的语言来描述. BFC 应该可以抽象成一个 独立的个体,出淤泥而不染的白莲 ...

  4. C++虚析构函数的使用

    如果,你设计的程序里,释放对象实例的时候,有“使用某个基类的指针,来释放它指向的派生类的实例”这种用法出现的话,那么,这个基类的destructor就应该设计成virtual的. 如果,基类不是vir ...

  5. Python---哈夫曼树---Huffman Tree

    今天要讲的是天才哈夫曼的哈夫曼编码,这是树形数据结构的一个典型应用. !!!敲黑板!!!哈夫曼树的构建以及编码方式将是我们的学习重点. 老方式,代码+解释,手把手教你Python完成哈夫曼编码的全过程 ...

  6. JavaScript递归简单实现个对象深拷贝

    JavaScript中对象的深拷贝来说一直都算比较恶心 毕竟没有什么api能直接全拷贝了 得自己便利写  最近在项目中需要深拷贝 自己简单封了个方法 话不多说 直接上码 <!DOCTYPE ht ...

  7. 洛谷 P4073 [WC2013]平面图

    #include<bits/stdc++.h> using namespace std; ; typedef long double LD; ; ); int dcmp(LD x){ret ...

  8. 自制操作系统小样例——参考部分linux0.11内核源码

    详细代码戳这里. 一.启动引导 采用软件grub2进行引导,基于规范multiboot2进行启动引导加载.multiboot2的文档资料戳这里. 二.具体内容 开发环境 系统环境:Ubuntu 14. ...

  9. string和数值之间的转换

    string和数值之间的转换 to_string(val) 一组重载函数,返回数值val的string表示val可以是任何算数类型. stoi(s,p,b),stol(s,p,b),stoul(s,p ...

  10. Java学习之for循环打印菱形练习

    for循环语句是Java程序设计中非常有用的循环语句.一个for循环可以用来重复执行某条语句,直到某个条件得到满足.在Java 5新增的加强的foreach语法,也非常有用. 1. for语句 for ...