码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-10-19 11:19:36      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:转化   size   ons   you   floyd   sizeof   ++   namespace   ret   

#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\n",num[i][9]);
    }
    return 0;
}

 

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

标签:转化   size   ons   you   floyd   sizeof   ++   namespace   ret   

原文地址:https://www.cnblogs.com/zhangzhenjun/p/11703139.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!