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的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces 1039D You Are Given a Tree (看题解)
(模拟)关于进制的瞎搞---You Are Given a Decimal String...(Educational Codeforces Round 70 (Rated for Div. 2))