B - You Are Given a Decimal String... CodeForces - 1202B

Posted zhangzhenjun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B - You Are Given a Decimal String... CodeForces - 1202B相关的知识,希望对你有一定的参考价值。

#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;
}

 

以上是关于B - You Are Given a Decimal String... CodeForces - 1202B的主要内容,如果未能解决你的问题,请参考以下文章

[CF1039D]You Are Given a Tree

Codeforces 1039D You Are Given a Tree (看题解)

(模拟)关于进制的瞎搞---You Are Given a Decimal String...(Educational Codeforces Round 70 (Rated for Div. 2))

[CF1039D]You Are Given a Tree

「CF1039D」You Are Given a Tree

CF1039D You Are Given a Tree [根号分治]