【百度之星复赛】T5 Valley Numer
Valley Numer
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。用f[i][j][0/1/2]表示i位,最高位为j,当前处于 递减/递增/平 状态的数的个数。然后尽情讨论吧!
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
const ll mod=1000000007;
ll f[110][12][3];
//0 减 1 增 2 未知
int v[110];
char str[110];
ll ans;
int n,tag,tmp;
void init()
{
int i,j,k;
for(i=0;i<=9;i++) f[1][i][2]=1;
for(i=2;i<=100;i++)
{
for(j=0;j<=9;j++)
{
f[i][j][2]=f[i-1][j][2];
for(k=0;k<=9;k++)
{
if(j<=k) f[i][j][1]=(f[i][j][1]+f[i-1][k][1])%mod;
if(j<k) f[i][j][1]=(f[i][j][1]+f[i-1][k][2])%mod;
if(j>=k) f[i][j][0]=(f[i][j][0]+f[i-1][k][0])%mod;
if(j>k) f[i][j][0]=(f[i][j][0]+f[i-1][k][1]+f[i-1][k][2])%mod;
}
}
}
}
void work()
{
scanf("%s",str),n=strlen(str);
int i,j;
ans=0,tag=2;
for(i=1;i<=n;i++) v[i]=str[n-i]-'0';
for(i=1;i<n;i++) for(j=1;j<=9;j++) ans=(ans+f[i][j][0]+f[i][j][1]+f[i][j][2])%mod;
for(i=n;i>=1;i--)
{
for(j=(i==n)?1:0;j<v[i];j++)
{
tmp=tag;
if(i!=n&&j>v[i+1]) tmp=1;
if(i!=n&&j<v[i+1])
{
if(tag==1) continue;
tmp=0;
}
if(tmp==2)
{
ans=(ans+f[i][j][0]+f[i][j][1]+f[i][j][2])%mod;
}
if(tmp==1)
{
if(j>=v[i+1]) ans=(ans+f[i][j][1]+f[i][j][2])%mod;
}
if(tmp==0)
{
if(j<=v[i+1]) ans=(ans+f[i][j][0]+f[i][j][1]+f[i][j][2])%mod;
if(j>v[i+1]) ans=(ans+f[i][j][1]+f[i][j][2])%mod;
}
}
if(i!=n&&v[i]>v[i+1]) tag=1;
if(i!=n&&v[i]<v[i+1])
{
if(tag==1) break;
tag=0;
}
}
if(!i) ans=(ans+1)%mod;
printf("%lld\n",ans);
}
int main()
{
int T;
init();
scanf("%d",&T);
while(T--) work();
return 0;
}//1 130
【百度之星复赛】T5 Valley Numer的更多相关文章
- 百度之星复赛T5&&hdu6148
Problem Description 众所周知,度度熊非常喜欢数字. 它最近发明了一种新的数字:Valley Number,像山谷一样的数字. 当一个数字,从左到右依次看过去数字没有出现先递增接着递 ...
- 最强密码 (百度之星复赛 T5)
题目大意: 给出一个字符串A,要求最短的字符串B,B不是A的子序列. 求最短长度 和 最短的字符串个数 |A|<=105. 题解: 1.比赛的时候没有想出来,时隔一个多月又看到了这道题,虽 ...
- 百度之星复赛T6&&hd6149 ——Valley Numer II
Problem Description 众所周知,度度熊非常喜欢图. 它最近发现了图中也是可以出现 valley —— 山谷的,像下面这张图. 为了形成山谷,首先要将一个图的顶点标记为高点或者低点.标 ...
- 【2017百度之星程序设计大赛 - 复赛】Valley Numer
[链接]http://acm.hdu.edu.cn/showproblem.php?pid=6148 [题意] 在这里写题意 [题解] 先把1..N里面的山峰数字个数算出来->x 然后用N减去这 ...
- hdu5713 K个联通块[2016百度之星复赛B题]
dp 代码 #include<cstdio> ; ; int n,m,k,cnt[N]; ]; ][],i,j,l,a,b; int check(int x,int y) { int i; ...
- hdu5714 拍照[2016百度之星复赛C题]
由于船移动的速度都一样,那么对于往一个方向的船相对距离其实是不变的,我们可以把往一个方向移动的船都视作静止,并求出在哪些观测位置可以看到,很明显对于船[x,y,z],当x+z>=y-z的时候,可 ...
- hdu5715 XOR 游戏 [2016百度之星复赛D题]
比赛的时候没仔细想,赛后一想这题其实挺简单的,先求出序列的异或前缀和,然后将异或前缀和建出一颗trie树,然后我们可以二分答案,把问题变成判定性问题,判定是否存在一种方案,使得所有的分组的异或和都大 ...
- 百度之星复赛 1004 / hdu5715 二分dp+trie
XOR 游戏 Problem Description 众所周知,度度熊喜欢XOR运算[(XOR百科)](http://baike.baidu.com/view/674171.htm). 今天,它发 ...
- 百度之星复赛Astar Round3
拍照 树状数组(SB了).求出静止状态下,每个点能看到多少个向右开的船c1[i],多少个向左开的船c2[i]. max{c1[i] + c2[j], (满足i <= j) }即为答案.从后往前 ...
随机推荐
- 生成唯一标识符 ,通用唯一标识符 UUID
import java.util.UUID; /** * UUID生成工具 * */ public final class UuidGenUtils { /** * 生成一个UUID串(32个字符,其 ...
- MySQL OCP
http://www.royalwzy.com/ http://www.aixchina.net/home/space.php?uid=898169
- 调试SQLSERVER (一)生成dump文件的方法
http://www.cnblogs.com/lyhabc/p/4184149.html http://www.cnblogs.com/lyhabc/p/4185399.html
- Dedecms 数据库结构分析
本文主要是为了今后对Dedecms做二次开发所写.安装后dedecms的数据库结构,如(图1)所示, 安装后的dedecms一共有 86 张数据表. 主要数据结构表 dede_addonarticle ...
- EasyMvc入门教程-基本控件说明(6)进度条
进度条的发明是很牛逼的,就如12306采用了队列解决了系统崩溃的问题一样..:) 进度条大家都见过,那么我们先来实现一个简单的进度条,请看例子: @Html.Q().Progress().Value( ...
- SQL 语句基础
一 查询常量1. SELECT 学生编号, 学生姓名,性别 FROM tb_Student2. SELECT 学生姓名 AS 姓名, 性别 AS 学生性别 FROM tb_Student3. SELE ...
- Apache OFBIZ高速上手(三)--文件夹&&配置文件介绍
1.OFBiz简单介绍,什么是OFBiz OFBiz is an Apache Software Foundation top level project. A ...
- js 动态获取对象多级属性
var obj={ f1:{f2:{f3:2}} } var key="f1.f2.f3" var value=eval("obj."+key); consol ...
- 【开发总结】—— BABYLON 项目开发必备系列
前言:在公司主要使用Babylon.js作为前端引擎,我自己在开发中总结到基本上每一个新项目都会需要这些基本设置. 一.ios兼容:解决镜面反射 如果不加offline,材质中有镜面反射,苹果手机 ...
- js 输入框增加删除操作
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...