zoukankan      html  css  js  c++  java
  • B

    #include <bits/stdc++.h>
    using namespace std;
    /*
    这道题的难点在于怎样加x或者y才能使的a转化为b,并且加的x和y的和最少
    这道题竟然用了floyd,转换成求最短路
    
    这才深刻地体会到,我根本不会算法
    */
    const int maxn=10;
    const int INF=0x3f3f3f3f;
    int dis[maxn][maxn];
    int num[maxn][maxn];
    const int len=2e6+10;
    char s[len];
    int length;
    void work(int x,int y)
    {
        memset(dis,INF,sizeof dis);//如果INf=0x3f,不能直接memset INF,直接memset 0x3f////0x3f3f3f3f(INF)
        for(int i=0; i<maxn; i++)
            dis[i][(i+x)%10]=dis[i][(i+y)%10]=1;
        for(int k=0; k<maxn; k++)
            for(int i=0; i<maxn; i++)
                for(int j=0; j<maxn; j++)
                    dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
        for(int i=1; i<length; i++)
        {
            int a=s[i-1]-'0';
            int b=s[i]-'0';
            if(dis[a][b]==INF)
            {
                num[x][y]=-1;
                return ;
            }
            num[x][y]+=(dis[a][b]-1);
        }
    }
    int main()
    {
        scanf("%s",s);
        length=strlen(s);
        for(int i=0; i<maxn; i++)
            for(int j=0; j<=i; j++)
            {
                work(i,j);
                num[j][i]=num[i][j];
            }
        for(int i=0; i<maxn; i++)
        {
            for(int j=0; j<maxn-1; j++)
                printf("%d ",num[i][j]);
            printf("%d
    ",num[i][9]);
        }
        return 0;
    }
  • 相关阅读:
    OCP-1Z0-053-V12.02-40题
    OCP-1Z0-053-V12.02-255题
    OCP-1Z0-053-V12.02-407题
    OCP-1Z0-053-V12.02-298题
    OCP-1Z0-053-V12.02-38题
    OCP-1Z0-053-V12.02-274题
    OCP-1Z0-053-V12.02-159题
    OCP-1Z0-053-V12.02-406题
    OCP-1Z0-053-V12.02-369题
    OCP-1Z0-053-V12.02-610题
  • 原文地址:https://www.cnblogs.com/zhangzhenjun/p/11703139.html
Copyright © 2011-2022 走看看