zoukankan      html  css  js  c++  java
  • 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
    ",ans);
    92 }
  • 相关阅读:
    Linux 学习笔记1
    Openstack中的LoadBalancer(负载均衡)功能使用实例
    分析事务与锁3
    MemoryStream
    JBPM4学习之路2:流程部署
    在MongoDB中一起使用$or和sort()
    使用avalon msui绑定实现基于组件的开发
    深度剖析Byteart Retail案例:应用程序的配置
    最年轻的系统分析员的考试心得
    linux学习体会,献给初学者
  • 原文地址:https://www.cnblogs.com/ccsu-kid/p/11618885.html
Copyright © 2011-2022 走看看