• 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坑
  • 相关阅读:
    leetcode-Single Number
    设计模式六大原则(4)——接口隔离原则
    设计模式六大原则(3)——依赖倒置原则
    设计模式六大原则(2)——里氏替换原则
    设计模式六大原则(1)——单一职责原则
    观察者模式
    转:画图工具
    android 博客列表
    app crash率的标准
    查看某一个开发者代码修改量的脚本(ios平台可用)
  • 原文地址:https://www.cnblogs.com/IKnowYou0/p/6636513.html
Copyright © 2020-2023  润新知