Arithmetic of Bomb

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

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

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

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

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

#include <bits/stdc++.h>
using namespace std;
const int MD=1e9+;
int c[];
char s[];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%s",s+);
int ans=;
for(int i=;s[i];)
{
if(s[i]=='(')
{
int j=i+,n2=,n=;
while(s[j]!=')')
{
c[++n]=s[j]-;
j++;
}
j+=;
while(s[j]!=')')
{
n2=n2*+s[j]-;
j++;
}
for(int j=n+;j<=n*n2;j++)
c[j]=c[(j-)%n+];
for(int j=;j<=n*n2;j++)
ans=(1ll*ans*+c[j])%MD;
i=j+;
}
else
{
int j=i;
int n=;
while(s[j]!='('&&s[j])
{
c[++n]=s[j]-;
j++;
}
for(int j=;j<=n;j++)
ans=(1ll*ans*+c[j])%MD;
i=j;
}
}
printf("%d\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
Copy

2
24
96

#include <bits/stdc++.h>
using namespace std;
typedef __int64 LL;
const int N=1e4+;
const LL MD=1e9+;
LL f[N],dp[N];
int main()
{
f[]=;
f[]=;
for(int i=; i<N; i++)
f[i]=(f[i-]<<)%MD;
dp[]=;
dp[]=;
for(int i=; i<N; i++)
dp[i]=(*(f[i-]+dp[i-])+*(f[i-]+dp[i-]))%MD;
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
LL ans=;
for(int i=;i<=n;i++)
{
if(i==||i==n)
{
ans=(ans+f[n]+dp[n])%MD;
}
else
{
ans=(ans+f[i]*(f[n-i]+dp[n-i])%MD)%MD;
ans=(ans+f[n-i+]*(f[i-]+dp[i-])%MD)%MD;
}
}
cout<<ans<<endl;
}
return ;
}

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

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
const ll mod = 1e9 + ; string s;
ll dp[][][][][]; int dfs(int p, int now, int sta, int f, int st) {
if (p == s.size()) return ;
if (dp[p][now][sta][f][st] != -) return dp[p][now][sta][f][st];
ll& ret = dp[p][now][sta][f][st];
ret = ;
for (int i = ; i <= (f ? s[p] - '' : ); i++) {
if (sta == ) {
ret = (ret + dfs(p + , (i == && st ? : i), (i <= now ? : ), f && i == s[p] - '', st && i == )) % mod;
}
if (sta == && i >= now) {
ret = (ret + dfs(p + , (i == && st ? : i), , f && i == s[p] - '', st && i == )) % mod;
}
}
return ret;
} int main(int argc, char *argv[]) {
int T;
cin >> T;
while (T--) {
memset(dp, -, sizeof(dp));
cin >> s;
cout << (dfs(, , , , ) + mod - ) % mod << endl;
}
return ;
}

alley Numer II

 Accepts: 161
 Submissions: 538
 Time Limit: 12000/6000 MS (Java/Others)
 Memory Limit: 32768/32768 K (Java/Others)
Problem Description

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

它最近发现了图中也是可以出现 valley —— 山谷的,像下面这张图。

为了形成山谷,首先要将一个图的顶点标记为高点或者低点。标记完成后如果一个顶点三元组<X, Y, Z>中,X和Y之间有边,Y与Z之间也有边,同时X和Z是高点,Y是低点,那么它们就构成一个valley。

度度熊想知道一个无向图中最多可以构成多少个valley,一个顶点最多只能出现在一个valley中。

Input

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

每组数据的第一行包含三个整数N,M,K,分别表示顶点个数,边的个数,标记为高点的顶点个数。

接着的M行,每行包含两个两个整数Xi,Yi,表示一条无向边。

最后一行包含K个整数Vi,表示这些点被标记为高点,其他点则都为低点。

● 1≤T≤20

● 1≤N≤30

● 1≤M≤N*(N-1)/2

● 0≤K≤min(N,15)

● 1≤Xi, Yi≤N, Xi!=Yi

● 1≤Vi≤N

Output

对每组数据输出最多能构成的valley数目。

Sample Input
3
3 2 2
1 2
1 3
2 3
3 2 2
1 2
1 3
1 2
7 6 5
1 2
1 3
1 4
2 3
2 6
2 7
3 4 5 6 7
Sample Output
Copy

1
0
2

#include <bits/stdc++.h>

using namespace std;

int main(int argc, char *argv[]) {
int T;
cin >> T;
while (T--) {
int n, m, K;
cin >> n >> m >> K;
vector<vector<int>> g(n);
vector<int> vis(n);
for (int i = ; i < m; i++) {
int u, v;
cin >> u >> v;
u--, v--;
// cout << u << " " << v << endl;
g[u].push_back(v);
g[v].push_back(u);
}
for (int i = ; i < K; i++) {
int v;
cin >> v;
vis[v - ] = i + ;
}
vector<vector<int>> dp(n + , vector<int>( << K));
dp[][] = ;
for (int i = ; i < n; i++) {
if (vis[i]) dp[i + ] = dp[i];
else {
dp[i + ] = dp[i];
vector<pair<int, int>> vec;
// cout << g[i].size() << endl;
for (int v1 : g[i]) {
for (int v2 : g[i]) {
if (v1 != v2 && vis[v1] && vis[v2]) {
vec.push_back({vis[v1] - , vis[v2] - });
}
}
}
for (int j = ; j < ( << K); j++) {
if (dp[i][j]) {
for (auto e : vec) {
int x = e.first, y = e.second;
if (!(( << x) & j) && !(( << y) & j)) {
dp[i + ][j | ( << x) | ( << y)] = ;
}
}
}
}
}
}
int mx = ;
for (int i = ; i < (<<K); i++) {
if (dp[n][i]) {
int cnt = ;
for (int j = ; j < K; j++) {
if (( << j) & i) {
cnt++;
}
}
mx = max(mx, cnt);
}
}
cout << mx / << endl;
}
return ;
}

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

  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. 2017"百度之星"程序设计大赛 - 复赛 01,03,05

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

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

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

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

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

  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 6118 度度熊的交易计划 【最小费用最大流】 (2017"百度之星"程序设计大赛 - 初赛(B))

    度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

随机推荐

  1. WinForm 窗体

    Winform是.NET开发中对windows Form的一种称谓,form是窗体的意思,winform 称之为windows form. 一般中我们使用的东西分为 客户端.网页.APP 三大类. w ...

  2. myeclipes出现{Could not create the view: An unexpected except

    今天编写代码的时候突然出现了web工程不能部署的情况,后面了解到主要是因为那个myeclipse非正常关闭或者突然断电的情况,我的是属于第一种的,下面整理一下这个解决方法 1.关闭myeclipse ...

  3. SGU 258 Almost Lucky Numbers 接近幸运数(数位DP)

    题意: 定义一个具有2n位的正整数,其前n位之和与后n位之和相等,则为lucky数.给定一个区间,问有多少个正数可以通过修改某一位数从而变成lucky数?注意不能含前导0. 思路: 我的想法是记录那些 ...

  4. cityspace

    类别的网址:https://blog.csdn.net/u010069760/article/details/77847595 r,g,b:  250 170 160 parking   244 35 ...

  5. mtDNA|ctDNA|cpDNA|

    5.9细胞器基因组是编码细胞器蛋白质的环状DNA分子 细胞器中除真核细胞线粒体DNA(mtDNA)是线性的外,都是环状分子,比如叶绿体DNA(ctDNA,cpDNA).因为单个细胞器有几套不同拷贝的细 ...

  6. C++ 内存分配操作符new和delete详解

    重载new和delete 首先借用C++ Primer 5e的一个例子: string *sp = new string("a value"); ]; 这其实进行了以下三步操作: ...

  7. 03_4_this关键字

    03_4_this关键字 1. this关键字 在类的方法定义中使用的this关键字代表使用该方法的对象的引用. 当必须指出当前使用方法的对象是谁时要使用this. 有时使用this可以处理方法中成员 ...

  8. mysql主主复制汇总整理

    mysql主主复制汇总整理 一.Mysql主主.主从复制主要思路: 1.mysql复制实质: 就是其他的MySQL数据库服务器将这个数据变更的二进制日志在本机上再执行一遍,因此非常重要的一点是mysq ...

  9. java实现验证码功能

    java实现验证码功能 通过java代码实现验证码功能的一般思路: 一.通过java代码生成一张验证码的图片,将验证码的图片保存到项目中的指定文件中去,代码如下: package com.util; ...

  10. python入门:数字型和字符串换行要同类型 注意连接符

    #!/usr/bin/env python # -*- coding: utf-8 -*- #数字型和字符串换行要同类型 注意连接符 a = 1 b = 2 print(str(a) + " ...