G - Number Transformation BFS
In this problem, you are given an integer number s. You can transform any integer number A to another integer number B by adding x to A. This x is an integer number which is a prime factor of A (please note that 1 and A are not being considered as a factor of A). Now, your task is to find the minimum number of transformations required to transform s to another integer number t.
Input
Input starts with an integer T (≤ 500), denoting the number of test cases.
Each case contains two integers: s (1 ≤ s ≤ 100) and t (1 ≤ t ≤ 1000).
Output
For each case, print the case number and the minimum number of transformations needed. If it's impossible, then print -1.
Sample Input
2
6 12
6 13
Sample Output
Case 1: 2
Case 2: -1
思路:一开始理解错了, 这个题目的就是给你个整数s, 加他的素质数,以最小的次数转换到t,能转换为t输出叠加次数,否则输出-1;注意:这里的是素质数会随着s的而改变,即素质数的数组是变化的。
这个题目可以理解为 一个x数轴从S点,每次加上他的素质数,是否能得到t点;
AC代码
#include<iostream>
#include<queue>
#include<vector>
#include<cstring>
using namespace std;
const int N=;
vector<int >arr; struct stu{
int a;
int s;
}e1,e2,e3; int pri[N]={,,};
int n,m;
int mark[N]={}; int prime(){//将1010以内的素数打个表
for(int i=;i*i<=N;i++){
if(!pri[i])
for(int j=i+i;j<=N;j+=i){
pri[j]=;
}
}
} void f(int x){//寻找素质数
for(int i=;i<x;i++){
if(x%i==&&pri[i]==){
arr.push_back(i);
}
}
} int bfs(int n,int m){// 起点与终点
memset(mark,,sizeof(mark));
queue<stu>que;
e1.a=n;
e1.s=;
que.push(e1);
mark[n]=;
while(que.size()){
e2=que.front();
que.pop();
arr.clear();
f(e2.a);//更新素质数的数组
if(arr.size()==)
continue ;
for(int i=;i<arr.size();i++){
e3.a=e2.a+arr[i];
if(mark[e3.a]!=&&e3.a>=&&e3.a<=m){
mark[e3.a]=;
if(e3.a==m) return e2.s+;
else {
e3.s=e2.s+;
que.push(e3);
}
}
}
}
return -;
} int main()
{
prime();
int t;
cin>>t;
for(int i=;i<=t;i++){
cin>>n>>m;
if(m-n==)
{
int a=;
printf("Case %d: %d\n",i,a);
continue ;
}
else if(n>m||m-n==)//n若比M小或者相差为1 直接 -1;
{
int a=-;
printf("Case %d: %d\n",i,a);
continue ; }
int x=bfs(n,m);
if(x==-)
{
printf("Case %d: %d\n",i,x);
}
else {
printf("Case %d: %d\n",i,x);
}
} return ;
}
G - Number Transformation BFS的更多相关文章
- G - Number Transformation(BFS+素数)
In this problem, you are given an integer number s. You can transform any integer number A to anothe ...
- Codeforces 251C Number Transformation
Number Transformation 我们能发现这个东西是以2 - k的lcm作为一个循环节, 然后bfs就好啦. #include<bits/stdc++.h> #define L ...
- LightOJ 1141 Number Transformation
Number Transformation In this problem, you are given an integer number s. You can transform any inte ...
- hdu4952 Number Transformation (找规律)
2014多校 第八题 1008 2014 Multi-University Training Contest 8 4952 Number Transformation Number Transform ...
- bzoj 3858: Number Transformation 暴力
3858: Number Transformation Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 82 Solved: 41[Submit][Sta ...
- HDU-4952 Number Transformation
http://acm.hdu.edu.cn/showproblem.php?pid=4952 Number Transformation Time Limit: 2000/1000 MS (Java/ ...
- CodeForces346 C. Number Transformation II
C. Number Transformation II time limit per test 1 second memory limit per test 256 megabytes input s ...
- CCPC2018-湖南全国邀请赛 G String Transformation
G.String Transformation 题目描述 Bobo has a string S = s1 s2...sn consists of letter a , b and c . He ca ...
- CodeForces 346C Number Transformation II
Number Transformation II 题解: 对于操作2来说, a - a % x[i] 就会到左边离a最近的x[i]的倍数. 也就是说 [ k * x[i] + 1, (k+1)* x ...
随机推荐
- 在vscode中配置LeetCode插件,从此愉快地刷题
大家好,今早在B站看到up主的vscode里藏了leetcode插件,这才知道原来还有这款神器.但是没想到在用的时候遇到了一些麻烦,花了一点时间才解决.所以写这篇文章除了给大家安利这个好用的插件之外, ...
- 【西北大学集训队选拔赛】D温暖的签到题(自创数据结构)
题目链接 #include <bits/stdc++.h> #define NUM #define ll long long using namespace std; int n, m; ...
- Range Module
2019-09-21 18:54:16 715. Range Module 问题描述: 问题求解: 用线段树解决了. class RangeModule { Node root; class Node ...
- javaAPI操作ES分组聚合
连接es的客户端使用的 TransportClient SearchRequestBuilder requestBuilder = transportClient.prepareSearch(indi ...
- windows10环境下QtCreator中出现skipping incompatible xxx when searching for xxx 问题解决办法
windows10环境下QtCreator中出现skipping incompatible xxx when searching for xxx 我再QtCreator中想导入一个外部库时,他提示不匹 ...
- 【笔记3-31】Python语言基础-字典dict
创建字典 dict1 = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'k4': 'v4'} dict2 = dict(k1='v1', k2='v2', k3='v3' ...
- CentOS7配置环境变量
执行命令env查看当前环境变量: [duanyongchun@192 3DUnetCNN]$ env 例如扩展环境变量为/tmp/bin: PATH=$PATH:/tmp/bin 查看特定环境变量命令 ...
- 添加属于自己的python模块空间
在我们学习python的过程中会遇到很多时候,我们需要自己曾经写过的模块,它可能是一个函数或者其他的东西,,,, 下面是我的解决过程,如果你像将自己建立的文件夹当作你存放自己写的模块的地方,你需要将你 ...
- 使用python-crontab给linxu设置定时任务
安装pip install python-crontab #coding=utf-8 from crontab import CronTab #创建类 class Crontabi(object): ...
- Java读源码之ReentrantLock
前言 ReentrantLock 可重入锁,应该是除了 synchronized 关键字外用的最多的线程同步手段了,虽然JVM维护者疯狂优化 synchronized 使其已经拥有了很好的性能.但 R ...