UESTC_秋实大哥掰手指 2015 UESTC Training for Dynamic ProgrammingProblem B

本文主要是介绍UESTC_秋实大哥掰手指 2015 UESTC Training for Dynamic ProgrammingProblem B,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

B - 秋实大哥掰手指

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 2048/1024KB (Java/Others)
Submit Status

秋实大哥发现数据结构专题出到了N题,但是他一时算不出来已经有了几道题,他就萌萌地掰手指数。 这个时候他发现,虽然人们根据手指数创造了十进制数,但是两只手同时能表达的数是0-10一共十一个数字。 这样,他觉得如果用手指表现十进制数,同一个十进制数就会有很多种不同的表现方法。 比如,110这样一个十进制数,就有110(1*100+1*10+0*1),AA(10*10+10*1 )和10A(1*100+0*10+10*1)三种表示方法(A表示伸出十根手指)。

title

title

title

现在给你一些十进制数,聪明的你能不能计算出按照秋实大哥的方法,每个数能有多少种表现方式(方案数对1000000007取模)。

Input

只有一组数据,第一行一个数字n,表示人赢给出的数字的长度。 第二行一个整数a(1<=a<=1e1000000),表示给出的十进制数。

Output

对于每组数据输出一个整数,表示输入的数人赢有多少种表示方法(结果可能很大,取模1000000007的余数)。

Sample input and output

Sample InputSample Output
1 
1
1
3
110
3
6
100100
11

Hint

注意内存~~ 怎么处理课上会讲呀~~

 

解题报告:

根据题目条件,我们不难想到上一位最多只能缺 10 (即在上一位摆的数比规定数字少 1 ),那么我们可以设计这样的状态:

 F( i , 0 )  表示第 i 位为止,不缺 10 的方案数.

 F( i , 1 )  表示第 i 位为止,缺 10 的方案数.

如何转移呢?

 我们先假设当前正在转移第 i 位,且第 i 位的数字为 Number.

 显然有

  f( i , 0 )  += f( i – 1 , 0 ) ; //上一位就不缺,这一位也不缺,正常摆.

  If (Number == 0)

f( i , 0 )  += f( i – 1 , 1 ) ;  //上一位缺了 10 ,这位恰好是 0 ,补上.

f( i , 1 )  += f( i – 1 , 1 ) ;  //上一直缺了 10 ,这次不妨摆 9 ,转移到下一位依然缺 10

  else if (Number == 1)

f( i , 1 )  += f( i – 1 , 1 )  //这一位需要 11 ,摆 10 ,转移到下一位依然缺 10

f( i , 1 )  += f( i – 1 , 0 )  //上一位不缺,这一位摆的数少 1 ,转移到下一位缺 10

  else

f( i , 1 )  += f( i – 1 , 0 )  //上一位不缺,这一位摆的数少 1 ,转移到下一位缺 10

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
typedef long long ll;
ll mod = 1000000007;
ll f[2][2];
/*
0 到上次为止,不缺
1 到上次为止,缺10
*/
int cur = 0;
void init_()
{int i;for(i = 0 ; i <= 1 ; ++ i)f[cur][i] = 0;
}int main(int argc,char *argv[])
{int n,i,j,c,k;scanf("%d",&n);char ch;while(1){ch = getchar();if (ch == '\n')break;}memset(f,0,sizeof(f));//
    ch = getchar();int num = ch - '0';f[cur][0]  = 1;if (num != 0)f[cur][1]  = 1;//
  for(i = 1 ; i < n ; ++ i){cur ^= 1;init_();ch = getchar();int num = ch - '0';f[cur][0] = (f[cur][0] % mod+ f[cur^1][0] % mod ) % mod;if (num == 0){f[cur][0] = (f[cur][0] % mod+ f[cur^1][1] % mod) % mod;f[cur][1] = (f[cur][1] % mod+ f[cur^1][1] % mod) % mod;}else if(num == 1){f[cur][1] = (f[cur][1] % mod +  f[cur^1][1] % mod ) % mod;f[cur][1] = (f[cur][1] % mod +  f[cur^1][0] % mod) % mod;}else{f[cur][1] = (f[cur][1] % mod +  f[cur^1][0] % mod ) % mod;}}printf("%lld\n",f[cur][0] % mod);return 0;
}

 

转载于:https://www.cnblogs.com/Xiper/p/4539605.html

这篇关于UESTC_秋实大哥掰手指 2015 UESTC Training for Dynamic ProgrammingProblem B的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/241345

相关文章

C# dynamic类型使用详解

《C#dynamic类型使用详解》C#中的dynamic类型允许在运行时确定对象的类型和成员,跳过编译时类型检查,适用于处理未知类型的对象或与动态语言互操作,dynamic支持动态成员解析、添加和删... 目录简介dynamic 的定义dynamic 的使用动态类型赋值访问成员动态方法调用dynamic 的

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

论文精读-Supervised Raw Video Denoising with a Benchmark Dataset on Dynamic Scenes

论文精读-Supervised Raw Video Denoising with a Benchmark Dataset on Dynamic Scenes 优势 1、构建了一个用于监督原始视频去噪的基准数据集。为了多次捕捉瞬间,我们手动为对象s创建运动。在高ISO模式下捕获每一时刻的噪声帧,并通过对多个噪声帧进行平均得到相应的干净帧。 2、有效的原始视频去噪网络(RViDeNet),通过探

Post-Training有多重要?一文带你了解全部细节

1. 简介 随着LLM学界和工业界日新月异的发展,不仅预训练所用的算力和数据正在疯狂内卷,后训练(post-training)的对齐和微调方法也在不断更新。InstructGPT、WebGPT等较早发布的模型使用标准RLHF方法,其中的数据管理风格和规模似乎已经过时。近来,Meta、谷歌和英伟达等AI巨头纷纷发布开源模型,附带发布详尽的论文或报告,包括Llama 3.1、Nemotron 340

CF Bayan 2015 Contest Warm Up B.(dfs+暴力)

B. Strongly Connected City time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/probl

CF Bayan 2015 Contest Warm Up A.(模拟+预处理)

A. Bayan Bus time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/problem/A The fi

2015年校赛总结

题目名为“校赛总结”,其实更想换成“Rainbow为什么五题滚粗?!”。作为今年校赛大二没拆的两个队伍之一,结果打成这样,没脸见人了,总结起来就是我认为自己今天SB了。主要有以下几点: 1.我今天状态的确不好,最后卡的那道B题跟去年在农大校赛上遇见的那题类似,在最后那段时间我已经有思路了,可是由于当时不敢写。等到最后15分钟才开始敲,加上我用很麻烦的Dijstra那种方法,调试起来好多细节要处理

百度之星 2015 复赛 1001 (数长方形)

数长方形    Accepts: 595    Submissions: 1225  Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description 小度熊喜欢玩木棒。一天他在玩木棒的时候,发现一些木棒会形成长方形