cf1202B. You Are Given a Decimal String...(求出所有的x-y型 对于s串需要添加多少字符可被该计算器打印 巧妙地最短路暴力)

题目
在这里插入图片描述
在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=10+5,M=2e6+5,INF=2e7;
int dis[N][N];
char s[M];int len;
inline ll cal(int x,int y){
    for(int i=0;i<10;++i) for(int j=0;j<10;++j) dis[i][j]=INF;
    for(int i=0;i<10;++i) dis[i][(i+x)%10]=1,dis[i][(i+y)%10]=1;
    for(int k=0;k<10;++k) for(int i=0;i<10;++i) for(int j=0;j<10;++j)
        if(dis[i][j]>dis[i][k]+dis[k][j]) dis[i][j]=dis[i][k]+dis[k][j];
    ll ans=0;
    for(int i=1;i<len;++i){
        int c1=s[i]-'0',c2=s[i+1]-'0';
        if(dis[c1][c2]==INF) return -1;
        ans+=dis[c1][c2]-1;
    }
    return ans;
}
int main(){
    scanf("%s",s+1);len=strlen(s+1);
    for(int x=0;x<10;++x)
        for(int y=0;y<10;++y) printf("%lld%c",cal(x,y),(y==9)?'\n':' ');
}
©️2020 CSDN 皮肤主题: 终极编程指南 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值