你能否给我解释一下Codeforces 1202B题中如何处理十进制字符串的转换问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计300个文字,预计阅读时间需要2分钟。
当然可以,请您提供需要改写的原文,我会根据您的要求进行修改。
#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; }
本文共计300个文字,预计阅读时间需要2分钟。
当然可以,请您提供需要改写的原文,我会根据您的要求进行修改。
#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; }

