2017 JUST Programming Contest 3.0 I. Move Between Numbers
2.0 s
256 MB
standard input
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.
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 n, s,
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.
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.
1
5 1 5
11111191111191111911
11181111111111818111
11811171817171181111
11111116161111611181
11751717818314111118
3
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的更多相关文章
- 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 ...
- 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_{ ...
- gym101532 2017 JUST Programming Contest 4.0
台州学院ICPC赛前训练5 人生第一次ak,而且ak得还蛮快的,感谢队友带我飞 A 直接用claris的模板啊,他模板确实比较强大,其实就是因为更新的很快 #include<bits/stdc+ ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- gym101343 2017 JUST Programming Contest 2.0
A.On The Way to Lucky Plaza (数论)题意:m个店 每个店可以买一个小球的概率为p 求恰好在第m个店买到k个小球的概率 题解:求在前m-1个店买k-1个球再*p ...
- 2017 JUST Programming Contest 2.0
B. So You Think You Can Count? 设dp[i]表示以i为结尾的方案数,每个位置最多往前扫10位 #include<bits/stdc++.h> using na ...
随机推荐
- 手机没Root?你照样可以渗透路由器
和Metasploit差不多,RouterSploit是一个强大的漏洞利用框架,用于快速识别和利用路由器中的普通漏洞,它还有个亮点,就是可以在绝大多数安卓设备上运行. 如果你想在电脑上运行,可以阅读这 ...
- ArcGIS Server启动服务报:ERROR: Unable to start Xvfb on any port in the range 6600 - 6619
http://blog.csdn.net/linghe301/article/details/10094421 今天尝试在Linux环境下安装ArcGIS Server10.2,启动服务碰到一个错误: ...
- Python遍历路径下文件并转换成UTF-8编码
http://www.cnblogs.com/wuyuegb2312/archive/2013/01/11/2856772.html 开始学Python,这篇文章来自于应用需求. os.walk很方便 ...
- 【Nginx】如何建立新连接
处理新连接事件的回调函数是ngx_event_accept,原型如下: void ngx_event_accept(ngx_event_t *ev) 具体流程如下: 1)首先调用accept方法试图建 ...
- 编程基础知识——Java JNI开发流程(2)
android中使用jni调用本地C++库 android平台上的本地库文件后缀 .so.类似windows上的dll文件. 要在android上使用jni.首先须要下载android ndk. 操作 ...
- mina客户端与服务端通信的易错点
使用mina进行项目开发时,如果客户端与服务端不在同一个项目下,需要关注一下两点: 第一.服务端与客户端的编码解码器一致 第二.过程中所用到的实体类的包名需要一致
- caution
做好需求更改的准备,提高代码的扩展性和可维护性:预留出修改bug和需求的时间:对需求理解透彻再开始写代码:代码不要写死,防止需求变动.
- Lightoj 1014 - Ifter Party
I have an Ifter party at the 5th day of Ramadan for the contestants. For this reason I have invited ...
- Uvalive 4043 Ants —— 二分图最大权匹配 KM算法
题目链接:https://vjudge.net/problem/UVALive-4043 题意: 给出n个白点和n个黑点的坐标, 要求用n条不相交的线段把他们连接起来,其中每条线段恰好连接一个白点和黑 ...
- YTU 2435: C++ 习题 输出日期时间--友元函数
2435: C++ 习题 输出日期时间--友元函数 时间限制: 1 Sec 内存限制: 128 MB 提交: 1069 解决: 787 题目描述 设计一个日期类和时间类,编写display函数用于 ...