首页 > 其他分享 >新十六进制

新十六进制

时间:2023-08-04 18:01:27浏览次数:38  
标签:十六进制 ch return int pos len dp

Smiling & Weeping

                     ---- 我知觉身后有人,

                        在呼唤我,

                        回头只有肆虐的风。

题目链接:码题集OJ-VIP (matiji.net)

思路:还是数位DP,不过是在其中有了筛选条件还有了一些特判,有些疲惫了( ̄o ̄) . z Z,话不多说,思路都在代码里面

Talk is cheap , show me the code

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int maxn = 500;
 5 ll dp[maxn][maxn] , num[maxn] ;
 6 char ch[maxn];
 7 bool flag;
 8 ll dfs(int pos , int last , bool lead , bool limit)
 9 {
10     ll ans = 0;
11     if(pos == 0) return 1;
12     if(!lead && !limit && dp[pos][last] != -1) return dp[pos][last];
13     int up = (limit ? num[pos] : 15);
14     for(int i = 0; i <= up; i++)
15     {
16         if(i <= last) continue; // 不符合新十六进制定义
17         if( lead && i==0 ) ans += dfs(pos-1 , -2 , true , limit && i==up);
18         else
19             ans += dfs(pos-1 , i , false , limit&&up == i);
20     }
21     if(!limit && !lead) dp[pos][last] = ans;
22     return ans;
23 }
24 inline int read_occ(char c)
25 {
26     if(isdigit(c))
27         return c-'0';
28     else
29         return c-'A'+10;
30 }
31 ll solve(int length)
32 {
33     int len = 0;
34     int ind = flag ? 2 : 1;
35     for(int i = length; i >= ind; i--)
36         num[++len] = read_occ(ch[i]);
37     memset(dp , -1 , sizeof(dp));
38     return dfs(len , -2 , true , true);
39 }
40 int main()
41 {
42     int len = 0;
43     scanf("%s",ch+1);
44     //ch[0] = '0';
45     //printf("%s\n",ch);
46     flag = ch[1]=='-' ? true : false;
47     while(ch[++len] != '\0'); len--;
48     //cout << len;
49     //  for(int i = 1; i <= 2; i++)
50     //      printf("%d\n",read_occ(ch[i]));
51     int start = 0;
52     if(ch[1] == '-') start++;
53     while(ch[++start]=='0'); start--;
54     for(int i = start; i < len; i++)
55     {
56         //if(ch[1] == '-') continue;
57         if(read_occ(ch[i]) >= read_occ(ch[i+1])){
58             printf("error\n");
59             return 0;
60         }
61     }
62     printf("%lld\n",(flag?-1:1)*(solve(len)-1));
63     return 0;
64 }

与风同行的的人,才有资格知道风的方向。

标签:十六进制,ch,return,int,pos,len,dp
From: https://www.cnblogs.com/smiling-weeping-zhr/p/17606659.html

相关文章

  • java 十六进制字符串转换为有符号整数
    StringhexString="FEF7";//十六进制字符串intintValue=Integer.parseInt(hexString,16);//将十六进制字符串转换为整数shortsignedValue=(short)intValue;//转换为短整型(16位有符号整数)intintValue=(bytes[1]&0xFF)<<8|(bytes[0]&0xFF);//合并......
  • C语言中的二进制数、八进制数和十六进制数
    C语言是一门使用数字的编程语言,其中包括了8进制和16进制的数字表示方法。这两种表示方法都可以用于整数和字符类型。8进制表示法8进制数字以数字0(零)和前缀0开头表示。例如,八进制数012表示为十进制的10。以下是一些示例:intx=012;//八进制的12,等价于十进制的10inty=0......
  • 2-3 编写函数 htoi(s),把由十六进制数字组成的字符串(包含可选的前缀 0x 或 0X)转换为与
    ArchlinuxGCC13.1.1 202304292023-07-2219:48:23星期六 点击查看代码#include<stdio.h>#include<ctype.h>inthtoi(constchar*s);intmain(){chararr[4]="0x3A";intresult=htoi(arr);printf("%d\n",resu......
  • java十六进制字符串转换成十进制
    Java十六进制字符串转换成十进制的实现方法1.概述在Java中,我们经常需要进行不同进制之间的转换。本文将介绍如何将十六进制字符串转换成十进制数。首先,我们来总结一下整个转换的流程:步骤描述步骤一定义一个十六进制字符串步骤二使用Java内置的方法将十六进制字符......
  • cto网络工程师:十六进制转换十进制
       十进制快速转换为十六进制  ......
  • 如何实现十六进制数转化为二进制 python的具体操作步骤
    十六进制数转化为二进制在计算机科学中,数字可以用不同的进制表示。其中,十六进制(hexadecimal)是一种非常常见的进制。在十六进制中,除了0-9的十个数字,还有A-F的六个字母,分别代表了十进制的10-15。而二进制(binary)是计算机中最常用的进制,因为计算机中的所有数据都是以二进制的形......
  • 快速输出十进制数的十六进制
    如果一个数输入时为十进制,可用scanf中的%x直接输出其十六进制下对应的数值#include<stdio.h>intmain(){ intx; scanf("%d",&x); printf("%x",x); return0;}......
  • C语言:进制转换器,实现二进制、八进制、十进制、十六进制之间的相互转化
    1#include<stdio.h>2#include<stdlib.h>3#include<string.h>4#include<ctype.h>56intdec2bin(intn){//十进制转二进制7if(n==0){8return0;9}else{10return(n%2+10*de......
  • 十六进制字符串转十进制
    十六进制转换在上位机通讯中必然会用到:字符串格式的十六进制,如011E,这里是2个字节,十六进制高位在前,低位在后,而数组存储则相反,前面为0,后面为高位如"011E"01为高位,1E为低位,而字符串数组存储则是data="011E"data[0]='0'data[1]='1'data[2]='1'data[3]='E',因此在逐为相加......
  • c#中十六进制字符串转单精度浮点数
    1varcountBytes=newbyte[]{66,12,25,217};2varcountHexStr=ToHexStrFromByte(countBytes.ToArray());3uintnum=uint.Parse(countHexStr,System.Globalization.NumberStyles.AllowHexSpecifier);4byte[]floatVals......