zoukankan      html  css  js  c++  java
  • Problem G: 等凹数字

    传送门:http://gdutcode.sinaapp.com/problem.php?cid=1057&pid=6

    解题思路:

    还是不会,等两天在来看一下。

    实现代码:

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <iostream>
     4 #include <algorithm>
     5 #include <vector>
     6 #include <queue>
     7 #include <time.h>
     8 #include <set>
     9 #include <map>
    10 #include <string>
    11 #include <math.h>
    12 #include <stdlib.h>
    13 using namespace std;
    14 long long dp[20][20][10][2][2][2];
    15 int num[20];
    16 int s[20];
    17 long long rec(int i,int pre,int up,int down,int flag,int q,int len,int ispa)
    18 {
    19     if(i<0)return up&&down&&ispa;
    20     if(~dp[i][len][pre][up][down][ispa]&&!flag&&!q)return dp[i][len][pre][up][down][ispa];
    21     long long res=0;
    22     int o=s[i];
    23     for(int j=0;j<10;j++)
    24     {
    25         num[i]=j;
    26         if(j>o&&flag)break;
    27         if(q)res+=rec(i-1,j,0,0,j<o?0:flag,q&&j==0,len-(q&&j==0),ispa);
    28         else if(j==pre)
    29         {
    30             if(ispa&&i<len/2)
    31             res+=rec(i-1,j,up,down,j<o?0:flag,q&&j==0,len,j==num[len-i-1]);
    32             else res+=rec(i-1,j,up,down,j<o?0:flag,q&&j==0,len,ispa);
    33         }
    34         else if(j>pre)
    35         {
    36             if(!down)continue;
    37             if(ispa&&i<len/2)
    38             res+=rec(i-1,j,1,down,j<o?0:flag,q&&j==0,len,j==num[len-i-1]);
    39             else res+=rec(i-1,j,1,down,j<o?0:flag,q&&j==0,len,ispa);
    40         }
    41         else if(j<pre)
    42         {
    43             if(up)continue;
    44             if(ispa&&i<len/2)
    45             res+=rec(i-1,j,up,1,j<o?0:flag,q&&j==0,len,j==num[len-i-1]);
    46             else res+=rec(i-1,j,up,1,j<o?0:flag,q&&j==0,len,ispa);
    47         }
    48     }
    49     if(!flag&&!q)dp[i][len][pre][up][down][ispa]=res;
    50     return res;
    51 }
    52 long long cal(long long x)
    53 {
    54     int len=0;
    55     while(x)
    56     {
    57         s[len++]=x%10;
    58         x/=10;
    59     }
    60     return rec(len-1,0,0,0,1,1,len,1);
    61 }
    62 int main()
    63 {
    64     memset(dp,-1,sizeof(dp));
    65     long long l,r;
    66     int t;
    67     scanf("%d",&t);
    68     while(t--){
    69     scanf("%lld%lld",&l,&r);
    70     printf("%lld
    ",cal(r)-cal(l-1));
    71     }
    72     return 0;
    73 }
    自己选的路,跪着也要把它走完------ACM坑
  • 相关阅读:
    ios 读取通讯录
    隐藏多余的分割线
    Cell高亮时设置cell内容
    iOS录音
    iOS发送信息功能(生成信息内容)
    iOS颜色选择器
    iOS缓存
    二维码扫描
    梵讯笔记
    微信开发后台库
  • 原文地址:https://www.cnblogs.com/IKnowYou0/p/6636513.html
Copyright © 2011-2022 走看看