ZOJ One Person Game

news/2024/11/8 5:50:01/

目录

1.题目

2.中文翻译

3.思路解析:

4.代码实现:


1.题目

One Person Game

Description 

        There is an interesting and simple one person game. Suppose there is a number axis under your feet. You are at point  A  at first and your aim is point  B . There are 6 kinds of operations you can perform in one step. That is to go left or right by  a,b  and  c , here  c  always equals to  a+b .

        You must arrive B as soon as possible. Please calculate the minimum number of steps.

Input
        There are multiple test cases. The first line of input is an integer $T(0 < T ≤ 1000) $indicates the number of test cases. Then T test cases follow. Each test case is represented by a line containing four integers 4 integers A, B, a and b, separated by spaces. ($-2^{31} ≤ A, B < 2^{31}, 0 < a, b < 2^{31}$)

Output
 For each test case, output the minimum number of steps. If it’s impossible to reach point B, output “-1” instead.

Examples
intput

2
0 1 1 2
0 1 2 4

output

1
-1

2.中文翻译

题目描述

        有一个有趣而简单的单人游戏。假设你脚下有一个数字轴。你一开始是在点 A ,你的目标是点  B  。一步可以执行6种操作。也就是向左或向右移动 a、b 和 c ,这里 c 总是等于 a+b 。

        你必须尽快到达B。请计算最小步数。

输入

        有多个测试用例。输入的第一行是一个整数 T(0<T≤1000) 表示测试用例的数量。然后是T行测试案例。每个测试用例由一行表示,该行包含四个整数4个整数 A、B、a 和 b,用空格分隔。(-2^{31}≤A,B<2^{31},0<A,B<2^{3})

输出

        对于每个测试用例,输出最小步骤数。如果无法到达B点,则输出“-1”。

样例输入

样例输出

3.思路解析:

        1.题目其实就是求 C1*a + C2*b + C3*c + C4*(-a)+C5*(-b)+C6*(-c)| = |A-B|,根据题意化简之后就变成了 |C1a+C_2b| = |A-B| ,目的就是判断左边这个方程是否有解.

        2.欧几里得扩展算法:我的算法专栏里面有讲解。

4.代码实现:

#include <algorithm>
#include <string.h>
#include <iostream>
#include <stdio.h>
#include <string>
#include <vector>
#include <queue>
#include <map>
#include <set>
using namespace std;
typedef long long LL;
const int N = 1e5+10;LL exgcd(LL a,LL b,LL &x,LL &y)
{if(b==0){x=1, y=0;return a;}LL ans=exgcd(b,a%b,x,y);LL tmp=x;x=y;y=tmp-a/b*y;return ans;
}int main()
{int t;scanf("%d", &t);while(t--){LL A, B, a, b, c, x, y;scanf("%lld %lld %lld %lld",&A, &B, &a, &b);if(A>B) swap(A,B);c=(B-A);LL g=exgcd(a,b, x, y);if(c%g!=0) puts("-1");else{a/=g, b/=g;x*=(c/g), y*=(c/g);LL k=(y-x)/(a+b);LL ans=10000000000ll;for(LL i=k-1;i<=k+1;i++){if(abs(x+i*b)+abs(y-i*a)==abs(x+i*b+y-i*a)) ans=min(ans,max(abs(x+i*b),abs(y-i*a)));else   ans=min(ans,abs(x+i*b)+abs(y-i*a));}cout<<ans<<endl;}}return 0;
}

     


http://www.ppmy.cn/news/356665.html

相关文章

分布式太阳能光伏发电逆变器监测

一、光伏发电现场 当今世界各国都对光伏发电技术非常重视&#xff0c;不断加大对光伏发电技术的投入&#xff0c;发达国家对于光伏发电技术很早就关注利用&#xff0c;而我国虽然起步时间完&#xff0c;但是我国的光伏发电行业也是发展迅速&#xff0c;已经是全球光伏产业龙头了…

太阳能板最大面积js

题目&#xff1a; 给航天器一侧加装长方形或正方形的太阳能板&#xff08;图中的红色斜线区域&#xff09;&#xff0c;需要先安装两个支柱&#xff08;图中的黑色竖条&#xff09;&#xff0c;再在支柱的中间部分固定太阳能板。但航天器不同位置的支柱长度不同&#xff0c;太阳…

华为机试:太阳能板最大面积

题目描述 给航天器一侧加装长方形和正方形的太阳能板(图中的斜线区域) 需要先安装两个支柱(图中的黑色竖条) 再在支柱的中间部分固定太阳能板 但航天器不同位置的支柱长度不同 太阳能板的安装面积受限于最短一侧的那支支柱的长度 现提供一组整型数组的支柱高度数据 假设每个支…

2022-2028年中国太阳能发电系统市场调查与市场需求预测报告

根据发改委《关于完善风电上网电价政策的通知》对风电上网电价相关规定&#xff1a;“2018年底之前核准的陆上风电项目&#xff0c;2020年底前仍未完成并网的&#xff0c;国家不再补贴&#xff1b;2019年1月1日至2020年底前核准的陆上风电项目&#xff0c;2021年底前仍未完成并…

【光伏预报/太阳能预报】上海道宁与Solargi为您提供开发地理数据库模拟工具和网络服务

Solargis提供开发地理数据库 模拟工具和网络服务 用于太阳能发电的规划 性能监控和管理 推动全球经济 转向可持续生产和消费 并推广环保能源技术 Solargis数据是用于 屋顶光伏系统性能监测的 日射强度计的实用替代方案 对于大型地面安装光伏系统 Solargis可作为 独立…

DAY19:二叉树(九)路径总和+已知中后序构造二叉树

文章目录 112.路径总和思路伪代码完整版写法1写法1必须分开两个函数的原因注意点 完整版写法2写法2不涉及到回溯的原因 106.中序和后序遍历构造二叉树思路伪代码后序数组如何切割出左右区间写法注意区间切割注意中序和前序如何唯一构造二叉树后序和前序能否唯一构造二叉树&…

智慧城市同城V4小程序V2.27独立开源版 + 小程序+全插件+VUE小程序开源前端 安装测试教程

智慧城市同城V4小程序V2.27开源独立版本月最新版&#xff0c;与上一版相比修复了一些小细节&#xff0c;功能本身并无大的变化。体验下来感觉唯一区别用户授权一键就登陆了&#xff0c;上两版都需要选择头像呢称。新版系统包含全插件、包括很多稀缺收费的插件都在里面如括招聘、…

第二章CompletableFuture

文章目录 Future和Callable接口FutureTask实现类为什么引出FutureTask Future到CompletableFutureFuture优点Future的缺点get()阻塞isDone()轮询Future应用现状 CompletableFuture基本介绍CompletionStage核心的四个静态方法&#xff08;分为两组&#xff09;runAsync无返回值s…