I. Move Between Numbers
time limit per test

2.0 s

memory limit per test

256 MB

input

standard input

output

standard output

You are given n magical numbers a1, a2, ..., an,
such that the length of each of these numbers is 20 digits.

You can move from the ith number
to the jth number,
if the number of common digits between ai and aj is exactly 17
digits.

The number of common digits between two numbers x and y is
computed is follow:

.

Where countXi is
the frequency of the ith digit
in the number x, and countYi is
the frequency of the ith digit
in the number y.

You are given two integers s and e,
your task is to find the minimum numbers of moves you need to do, in order to finish at number aestarting
from number as.

Input

The first line contains an integer T (1 ≤ T ≤ 250),
where T is the number of test cases.

The first line of each test case contains three integers ns,
and e (1 ≤ n ≤ 250) (1 ≤ s, e ≤ n),
where n is the number of magical numbers, s is
the index of the number to start from it, and e is the index of the number to finish at it.

Then n lines follow, giving the magical numbers. All numbers consisting of digits, and with length of 20 digits. Leading zeros are
allowed.

Output

For each test case, print a single line containing the minimum numbers of moves you need to do, in order to finish at number ae starting
from number as.
If there is no answer, print -1.

Example
input
1
5 1 5
11111191111191111911
11181111111111818111
11811171817171181111
11111116161111611181
11751717818314111118
output
3
Note

In the first test case, you can move from a1 to a2,
from a2 to a3,
and from a3 to a5.
So, the minimum number of moves is 3 moves.

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
#define ll long long
const int maxn = 255;
int n;
int e[maxn][maxn];
const int inf = 99999999; void initial() {
int i, j;
for (i = 1; i < maxn; ++i) {
for (j = 1; j < maxn; ++j) {
if (i == j) {
e[i][j] = 0;
}
else {
e[i][j] = inf;
}
}
}
}
/**
*floyd算法
*/
void floyd() {
int i, j, k;
for (k = 1; k <= n; ++k) {//遍历所有的中间点
for (i = 1; i <= n; ++i) {//遍历所有的起点
for (j = 1; j <= n; ++j) {//遍历所有的终点
if (e[i][j] > e[i][k] + e[k][j]) {//如果当前i-->j的距离大于i-->k--->j的距离之和
e[i][j] = e[i][k] + e[k][j];//更新从i--->j的最短路径
}
}
}
}
} int num[maxn][12];
char s[25]; void init(int i)
{
for(int k=0;k<20;k++)
num[i][s[k]-'0']++;
} int main()
{
// freopen("in.txt","r",stdin);
int T,x,y,i,j,k;
scanf("%d",&T);
while(T--)
{
initial();
memset(num,0,sizeof(num));
scanf("%d%d%d",&n,&x,&y);
for(i=1;i<=n;i++)
{
scanf("%s",&s);
init(i);
}
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
{
int com=0;
for(k=0;k<=9;k++)
{
com+=min(num[i][k],num[j][k]);
}
if(com==17)
{//加边
e[i][j] = 1;
e[j][i] = 1;
// cout<<i<<" "<<j<<endl;
}
}
floyd();
if(e[x][y]==inf)
printf("-1\n");
else
printf("%d\n",e[x][y]);
//通过x,y来计算最短路径 }
}

2017 JUST Programming Contest 3.0 I. Move Between Numbers的更多相关文章

  1. 2017 JUST Programming Contest 3.0 D. Dice Game

    D. Dice Game time limit per test 1.0 s memory limit per test 256 MB input standard input output stan ...

  2. 2017 JUST Programming Contest 2.0 题解

    [题目链接] A - On The Way to Lucky Plaza 首先,$n>m$或$k>m$或$k>n$就无解. 设$p = \frac{A}{B}$,$ans = C_{ ...

  3. gym101532 2017 JUST Programming Contest 4.0

    台州学院ICPC赛前训练5 人生第一次ak,而且ak得还蛮快的,感谢队友带我飞 A 直接用claris的模板啊,他模板确实比较强大,其实就是因为更新的很快 #include<bits/stdc+ ...

  4. 2017 JUST Programming Contest 3.0 B. Linear Algebra Test

    B. Linear Algebra Test time limit per test 3.0 s memory limit per test 256 MB input standard input o ...

  5. 2017 JUST Programming Contest 3.0 H. Eyad and Math

    H. Eyad and Math time limit per test 2.0 s memory limit per test 256 MB input standard input output ...

  6. 2017 JUST Programming Contest 3.0 K. Malek and Summer Semester

    K. Malek and Summer Semester time limit per test 1.0 s memory limit per test 256 MB input standard i ...

  7. 2017 JUST Programming Contest 3.0 E. The Architect Omar

    E. The Architect Omar time limit per test 1.0 s memory limit per test 256 MB input standard input ou ...

  8. gym101343 2017 JUST Programming Contest 2.0

    A.On The Way to Lucky Plaza  (数论)题意:m个店 每个店可以买一个小球的概率为p       求恰好在第m个店买到k个小球的概率 题解:求在前m-1个店买k-1个球再*p ...

  9. 2017 JUST Programming Contest 2.0

    B. So You Think You Can Count? 设dp[i]表示以i为结尾的方案数,每个位置最多往前扫10位 #include<bits/stdc++.h> using na ...

随机推荐

  1. Weblogic性能优化(图解)

    分类:Weblogic (2034) (1) 若是觉得对您有一丢丢的帮助,烦请顶一下哦,激励我码出更多的帖子,^_^谢谢! 1.数据源性能优化 1.1连接池参数配置 登录weblogic控制台,占击“ ...

  2. struts2 自己定义表单

    自己定义表单一定会涉及<s:iterator/>迭代,一个复杂的自己定义表单可能会嵌套n多层迭代. 比方一个自己定义一个问卷调查页面涉及3个模型:一个Survey代表一个调查.一个Page ...

  3. 电脑控制手机的另一选择——android vnc server

    近来发现的Android上的原生VNC Server,就是说只要手机上安装并运行这个软件,即可实现电脑上查看并控制手机了. 首先是手机端. 1)下载androidvncserver: http://c ...

  4. 原来,表名和字段名不能在pdo中“参数化查询”

    https://stackoverflow.com/questions/182287/can-php-pdo-statements-accept-the-table-or-column-name-as ...

  5. How to Uninstall Internet Explorer 11 for Windows 7

    Internet Explorer 11 is the newest version of Microsoft's web browser, but not everyone is a fan. If ...

  6. 微信小程序之 Tabbar(底部选项卡)

    1.项目目录 2.在app.json里填写:tab个数范围2-5个 app.json { "pages": [ "pages/index/index", &qu ...

  7. webstorm 6.0 注册码

    User Name: EMBRACE   License Key: ===== LICENSE BEGIN ===== 24718-12042010 00001h6wzKLpfo3gmjJ8xoTPw ...

  8. Linux Grub系统加密、破密、修复

    一.在重新启动系统时候按任意键进入 grub界面  Grub加密 一.title前的密码 修改grub.conf 这种加密只是在用户要进入grub界面的时候提示要输入密码,但是可以正常进入系统,有没有 ...

  9. STL源代码剖析——STL算法之set集合算法

    前言 本节介绍set集合的相关算法,各自是并集set_union,差集set_difference,交集set_intersection 和对称差集set_symmetric_difference.这 ...

  10. JS日历控件 灵活设置: 精确的时分秒.

     在今年7月份时候 写了一篇关于 "JS日历控件" 的文章 , 当时仅仅支持 年月日 的日历控件,如今优化例如以下:      1. 在原基础上 支持 yyyy-mm-dd 的年月 ...