Arithmetic of Bomb

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Problem Description
众所周知,度度熊非常喜欢数字。

它最近在学习小学算术,第一次发现这个世界上居然存在两位数,三位数……甚至N位数!

但是这回的算术题可并不简单,由于含有表示bomb的#号,度度熊称之为 Arithmetic of Bomb。

![](../../../data/images/C777-1001-1.jpg)

Bomb Number中的bomb,也就是#号,会展开一些数字,这会导致最终展开的数字超出了度度熊所能理解的范畴。比如”(1)#(3)”表示”1”出现了3次,将会被展开为”111”,

同理,”(12)#(2)4(2)#(3)”将会被展开为”12124222”。

为了方便理解,下面给出了Bomb Number的BNF表示。

```
<bomb number> := <bomb term> | <bomb number> <bomb term>
<bomb term> := <number> | '(' <number> ')' '#' '(' <non-zero-digit> ')'
<number> := <digit> | <digit> <number>
<digit> := '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
<non-zero-digit> := '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
```

请将Bomb Number中所有的#号展开,由于数字可能很长,结果对 1 000 000 007 取模。

 
Input
第一行为T,表示输入数据组数。

每组数据包含一个Bomb Expression。

- 1≤T≤100

- 1≤length(Bomb Number)≤1000

 
Output
对每组数据输出表达式的结果,结果对 1 000 000 007 取模。
 
Sample Input
4
1
(1)#(3)
(12)#(2)4(2)#(3)
(12)#(5)
 
Sample Output
1
111
12124222
212121205
 
Source

思路:模拟;根据BNF得到重复个数小于10;

#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<queue>
#include<algorithm>
#include<stack>
#include<cstring>
#include<vector>
#include<list>
#include<set>
#include<map>
using namespace std;
#define LL __int64
#define pi (4*atan(1.0))
#define eps 1e-8
#define bug(x) cout<<"bug"<<x<<endl;
const int N=2e3+,M=2e6+,inf=1e9+;
const LL INF=1e18+,mod=1e9+; char a[N];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%s",a);
int n=strlen(a);
LL ans=;
for(int i=;i<n;i++)
{
if(a[i]=='(')
{
int pos;
for(int j=i;;j++)
if(a[j]==')')
{
pos=j;
break;
}
int num=a[pos+]-'';
for(int k=;k<num;k++)
{
for(int l=i+;l<pos;l++)
{
ans=(ans*+a[l]-'')%mod;
}
}
i=pos+;
}
else ans=(ans*+a[i]-'')%mod;
}
printf("%lld\n",ans);
}
return ;
}

Pokémon GO

 Accepts: 738
 Submissions: 1725
 Time Limit: 3000/1500 MS (Java/Others)
 Memory Limit: 32768/32768 K (Java/Others)
Problem Description

众所周知,度度熊最近沉迷于 Pokémon GO。

今天它决定要抓住所有的精灵球!

为了不让度度熊失望,精灵球已经被事先放置在一个2*N的格子上,每一个格子上都有一个精灵球。度度熊可以选择任意一个格子开始游戏,抓捕格子上的精灵球,然后移动到一个相邻的至少有一个公共点的格子上继续抓捕。例如,(2, 2) 的相邻格子有(1, 1), (2, 1) 和 (1, 2) 等等。

现在度度熊希望知道将所有精灵球都抓到并且步数最少的方案数目。两个方案被认为是不同,当且仅当两个方案至少有一步所在的格子是不同的。

Input

第一行为T,表示输入数据组数。

每组数据包含一个数N。

●1≤T≤100

●1≤N≤10000

Output

对每组数据输出方案数目,结果对 1 000 000 007 取模。

Sample Input
3
1
2
3
Sample Output
2
24
96

思路:原题;http://blog.csdn.net/yanghui07216/article/details/50490089

Valley Numer

 Accepts: 548
 Submissions: 1125
 Time Limit: 2000/1000 MS (Java/Others)
 Memory Limit: 32768/32768 K (Java/Others)
Problem Description

众所周知,度度熊非常喜欢数字。

它最近发明了一种新的数字:Valley Number,像山谷一样的数字。

当一个数字,从左到右依次看过去数字没有出现先递增接着递减的“山峰”现象,就被称作 Valley Number。它可以递增,也可以递减,还可以先递减再递增。在递增或递减的过程中可以出现相等的情况。

比如,1,10,12,212,32122都是 Valley Number。

121,12331,21212则不是。

度度熊想知道不大于N的Valley Number数有多少。

注意,前导0是不合法的。

Input

第一行为T,表示输入数据组数。

每组数据包含一个数N。

● 1≤T≤200

● 1≤length(N)≤100

Output

对每组数据输出不大于N的Valley Number个数,结果对 1 000 000 007 取模。

Sample Input
3
3
14
120
Sample Output
3
14
119

思路:数位dp,dp[i][j][k]表示第i位前一位为j的方案数,k==0表示前面没有递增的情况,k==1表示有递增的情况;

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<queue>
#include<algorithm>
#include<stack>
#include<cstring>
#include<vector>
#include<list>
#include<set>
#include<map>
using namespace std;
#define LL __int64
#define pi (4*atan(1.0))
#define eps 1e-8
#define bug(x) cout<<"bug"<<x<<endl;
const int N=2e3+,M=2e6+,inf=1e9+;
const LL INF=1e18+,mod=1e9+; LL f[][][],bit[N];
LL dp(int pos,int pre,int now,int flag,int p)
{
if(pos==)return ;
if(p&&flag&&f[pos][pre][now]!=-)return f[pos][pre][now];
int x=flag?:bit[pos];
LL ans=;
for(int i=;i<=x;i++)
{
if(!p)
ans+=dp(pos-,i,,flag||i<x,p||i);
else
{
if(now)
{
if(i>=pre)ans+=dp(pos-,i,now,flag||i<x,p||i);
}
else
ans+=dp(pos-,i,now||i>pre,flag||i<x,p||i);
}
}
ans%=mod;
if(p&&flag)f[pos][pre][now]=ans;
return ans;
}
char a[N];
LL getans()
{ scanf("%s",a);
int len=,n=strlen(a);
for(int i=n-;i>=;i--)
bit[++len]=a[i]-'';
return dp(len,,,,);
}
int main()
{
memset(f,-,sizeof(f));
int T;
scanf("%d",&T);
while(T--)
{
LL out=getans();
out=(out+mod-)%mod;
printf("%lld\n",out);
}
return ;
}

Arithmetic of Bomb

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 20    Accepted Submission(s): 17

Problem Description
众所周知,度度熊非常喜欢数字。

它最近在学习小学算术,第一次发现这个世界上居然存在两位数,三位数……甚至N位数!

但是这回的算术题可并不简单,由于含有表示bomb的#号,度度熊称之为 Arithmetic of Bomb。

![](../../../data/images/C777-1001-1.jpg)

Bomb Number中的bomb,也就是#号,会展开一些数字,这会导致最终展开的数字超出了度度熊所能理解的范畴。比如”(1)#(3)”表示”1”出现了3次,将会被展开为”111”,

同理,”(12)#(2)4(2)#(3)”将会被展开为”12124222”。

为了方便理解,下面给出了Bomb Number的BNF表示。

```
<bomb number> := <bomb term> | <bomb number> <bomb term>
<bomb term> := <number> | '(' <number> ')' '#' '(' <non-zero-digit> ')'
<number> := <digit> | <digit> <number>
<digit> := '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
<non-zero-digit> := '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
```

请将Bomb Number中所有的#号展开,由于数字可能很长,结果对 1 000 000 007 取模。

 
Input
第一行为T,表示输入数据组数。

每组数据包含一个Bomb Expression。

- 1≤T≤100

- 1≤length(Bomb Number)≤1000

 
Output
对每组数据输出表达式的结果,结果对 1 000 000 007 取模。
 
Sample Input
4
1
(1)#(3)
(12)#(2)4(2)#(3)
(12)#(5)
 
Sample Output
1
111
12124222
212121205
 
Source

2017"百度之星"程序设计大赛 - 复赛 01,03,05的更多相关文章

  1. 2017"百度之星"程序设计大赛 - 复赛1005&&HDU 6148 Valley Numer【数位dp】

    Valley Numer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  2. 2017"百度之星"程序设计大赛 - 复赛1003&&HDU 6146 Pokémon GO【数学,递推,dp】

    Pokémon GO Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  3. 2017"百度之星"程序设计大赛 - 复赛1001&&HDU 6144 Arithmetic of Bomb【java大模拟】

    Arithmetic of Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  4. [SinGuLaRiTy] 2017 百度之星程序设计大赛 复赛

    [SinGuLaRiTy-1038] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. Arithmetic of Bomb Problem D ...

  5. 2017百度之星程序设计大赛 - 复赛 Arithmetic of Bomb

    http://acm.hdu.edu.cn/showproblem.php?pid=6144 解法:一个简单的模拟 #include <bits/stdc++.h> using names ...

  6. 2017"百度之星"程序设计大赛 - 复赛

    Arithmetic of Bomb  Accepts: 1050  Submissions: 1762  Time Limit: 2000/1000 MS (Java/Others)  Memory ...

  7. 【2017百度之星程序设计大赛 - 复赛】Valley Numer

    [链接]http://acm.hdu.edu.cn/showproblem.php?pid=6148 [题意] 在这里写题意 [题解] 先把1..N里面的山峰数字个数算出来->x 然后用N减去这 ...

  8. 【2017"百度之星"程序设计大赛 - 复赛】Arithmetic of Bomb

    [链接]http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=777&pid=1001 [题意] 在这里写 [题解] ...

  9. HDU 6113 度度熊的01世界 【DFS】(2017"百度之星"程序设计大赛 - 初赛(A))

    度度熊的01世界 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

随机推荐

  1. EditPlus配置GCC

    --GCC Compile-- 命令:D:\GCC\MinGW_RP_Green\bin\gcc.exe 参数:$(FileName) -o $(FileNameNoExt).exe 初始目录:$(F ...

  2. javax.servlet.ServletException: Servlet.init() for servlet springmvc threw exception

    type Exception report message Servlet.init() for servlet springmvc threw exception description The s ...

  3. 写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持)

    接前一篇CentOS 7下最新版(6.2.4)ELK+Filebeat+Log4j日志集成环境搭建完整指南,继续对ELK. logstash官方最新文档https://www.elastic.co/g ...

  4. 关于innodb_flush_log_at_trx_commit、innodb_flush_method、innodb_log_block_size和fsync()、O_DIRECT、iops、云盘的关系与总结

    想着整理关于innodb_flush_log_at_trx_commit.innodb_flush_method.innodb_log_block_size和fsync().O_DIRECT.iops ...

  5. opencv学习之路(11)、图像几何变换

    一.图像缩放 #include<opencv2/opencv.hpp> using namespace cv; void main(){ Mat src=imread("E:// ...

  6. Codeforces Round #481 (Div. 3)题解

    成功掉到灰,真的心太累了,orz!!!!,不是很懂那些国外大佬为什么每次都是20多分钟AK的,QAQ A. Remove Duplicates time limit per test 1 second ...

  7. map的迭代器

    Iterator<Entry<String,String>> iter=map.entrySet().iterator(); map的迭代器,用作遍历map中的每一个键值对 I ...

  8. ODAC(V9.5.15) 学习笔记(四)TCustomDADataSet(5)

    7.其他 名称 类型 说明 FindKey 类似于BDE的相关功能,在当前数据集中查找指定的记录 FindNearest 移动游标到最符合查找要求的第一条记录处 FindMacro 当前数据集中是否存 ...

  9. 4. 多重背包问题 I

    多重背包问题 I 描述 有 NN 种物品和一个容量是 VV 的背包. 第 ii 种物品最多有 sisi 件,每件体积是 vivi,价值是 wiwi. 求解将哪些物品装入背包,可使物品体积总和不超过背包 ...

  10. centos6配置网络常见问题

    1. 启用网卡 查看网卡模块: lsmod 移除网卡:modprobe -r e1000 装载网卡: modprobe e1000 2. 配置网络 vim /etc/sysconfig/network ...