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. 【转】nginx 和 php-fpm 通信使用unix socket还是TCP,及其配置

    原文: http://blog.csdn.net/pcyph/article/details/46513521 -------------------------------------------- ...

  2. protobuf 之 MessageLite 接口摘录

    class LIBPROTOBUF_EXPORT MessageLite { public: inline MessageLite() {} virtual ~MessageLite(); // Ba ...

  3. CentOS 使用httpd 配置局域网 yum源

    1.上传centos iso而且挂载 mkdir /mnt/cdr/iso mount -o /xxx.iso /mnt/cdr 2.使用createrepo来创建repo文件 cd /mnt/cdr ...

  4. 自己定义Gradle插件之&quot;Hello World&quot;

    自己定义Gradle插件之"Hello World" 0.新建一个用于开发这个插件的目录 1.确定Plugin id Plugin id一般定义为java 包名. 由字母和数字及& ...

  5. mysql中“Table ‘’ is read only”的解决办法

    之前是在linux下面直接Copy的data下面整个数据库文件夹,在phpMyAdmin里面重新赋予新用户相应权限后,drupal成功连接上数据库.但出现N多行错误提示,都是跟Cache相关的表是‘R ...

  6. myeclipse提示:Syntax error on tokens, delete these tokens怎么解决

    有中文字符或者符号,包括空格. 上次遇到一个问题,检查了一遍语法没错误, 后来发现是拷贝代码的时候有一部分中文空格没删除,就出现这个问题了. 一个个删除就OK了.

  7. SSH无密码验证可能出现的问题

    雪影工作室版权所有,转载请注明[http://blog.csdn.net/lina791211] 一.安装和启动SSH协议 假设没有安装ssh和rsync,可以通过下面命令进行安装. sudo apt ...

  8. ABAP doi 导出程序

    PERFORM FRM_OUTPUT_EXCEL_38 TABLES GT_RESULT USING 'ZHRPA038' LDF_PATH . FORM FRM_OUTPUT_EXCEL_38 TA ...

  9. linux网络socket 接口转

    linux网络socket 接口 1.socket函数:一个进程必须做的第一件事就是调用socket函数获得一个文件描述符. ------------------------------------- ...

  10. Android无法自动创建USB打印机节点/dev/usb/lp0【转】

    本文转载自:http://blog.csdn.net/u013686019/article/details/50165059 Android: 4.4.4 一.问题分析 当把USB打印机插入Andro ...