2019 字节跳动 [编程题]最大映射(贪心)

Posted ccsu-kid

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019 字节跳动 [编程题]最大映射(贪心)相关的知识,希望对你有一定的参考价值。

https://www.nowcoder.com/question/next?pid=1649268&qid=44705&tid=28244198

对每一种字母设定一个权值v,权值越大说明应该置为越大的数,然后按权值排序。

d[i]表示字母i+‘A‘对应的数,e[i]表示i这个数对应的字母;

如果有前导0,找到第一个不会构成前导0的数,然后从这个数开始交换字母。

 1 #define bug(x) cout<<#x<<" is "<<x<<endl
 2 #define IO std::ios::sync_with_stdio(0)
 3 #define ull unsigned long long
 4 #include <bits/stdc++.h>
 5 #define iter ::iterator
 6 #define pa pair<int,ll>
 7 #define pp pair<int,pa>
 8 using namespace  std;
 9 #define ll long long
10 #define mk make_pair
11 #define pb push_back
12 #define se second
13 #define fi first
14 #define ls o<<1
15 #define rs o<<1|1
16 ll mod=998244353;
17 const int N=2e5+5;
18 ll p[100];
19 ll a[100];
20 char s[100][100];
21 int T,n;
22 struct node
23     int id;
24     ll v;
25 b[100];
26 bool cmp(node n1,node n2)
27     return n1.v>n2.v;
28 
29 int d[100],e[100];
30 int main()
31     p[0]=1;
32     for(int i=1;i<=12;i++)
33         p[i]=p[i-1]*10;
34     
35     scanf("%d",&T);
36     for(int z=1;z<=T;z++)
37         scanf("%s",s[z]+1);
38         n=strlen(s[z]+1);
39         int h=1;
40         for(int i=n;i>=1;i--)
41             int c=s[z][i]-A;
42             a[c]+=p[h];
43             h++;
44         
45     
46     for(int i=0;i<10;i++)
47         b[i].id=i;
48         b[i].v=a[i];
49     
50     sort(b,b+10,cmp);
51     for(int i=0;i<10;i++)
52         int k=b[i].id;
53         d[k]=9-i;
54         e[9-i]=k;
55     
56     int id=0;
57     for(int g=0;g<10;g++)
58         int x=e[g];        
59         int f=0;
60         for(int i=1;i<=T;i++)
61             int c=s[i][1]-A;
62             if(c==x)
63                 f=1;
64                 break;
65             
66         
67         if(!f)
68             id=g;
69             break;
70         
71     
72     for(int i=id;i>0;i--)
73         swap(e[i],e[i-1]);
74     
75     for(int i=9;i>=0;i--)
76         d[e[i]]=i;
77     
78     ll ans=0;
79     for(int i=1;i<=T;i++)
80         int n=strlen(s[i]+1);
81         ll h=1;
82         ll res=0;
83         for(int j=n;j>=1;j--)
84             int c=s[i][j]-A;
85             c=d[c];
86             res+=1ll*c*h;
87             h*=10;
88         
89         ans+=res;
90     
91     printf("%lld\n",ans);
92 

 

以上是关于2019 字节跳动 [编程题]最大映射(贪心)的主要内容,如果未能解决你的问题,请参考以下文章

❤️TikTok字节跳动编程题实战2022校招——吐血分享总结。

字节跳动2019春招研发部分编程题汇总

字节跳动青训营笔试题解

字节跳动青训营笔试题解

字节跳动青训营笔试题解

字节跳动2019春招算法题