标签:模拟
问题 H: 宝盒密码
时间限制: 1 Sec 内存限制: 128 MB 提交: 17 解决: 6 我的状态:已解决
命题人:外部导入 算法分类:三级 模拟
上一题下一题状态
题目描述
勇敢的 Sbarrow 船长驾着白珍珠号,环游大半个地球,历经艰险,终于找到了琼斯的宝盒。可惜宝盒异常坚固,怎么都打不开,上面只有四个每隔一分钟变化一次的整数,还有一个用来输入密码的锁。Sbarrow 尝试了很多密码,但都不对。不过一天夜里,他得到了启迪,卡里布索女神托梦给他,告诉他:盒子的密码是不断变化的,如果设某一时间盒子上的四个整数,从左到右分别为l,h,a,b则此时盒子的密码为满足以下三个条件的最小的整数 x:
- l <= x 且 x <= h
- a mod x = 0
- x mod b = 0
Sbarrow 虽然勇敢,也很聪明,但他可不是一个优秀的算法专家,现在请你来帮他解决这个问题吧。
输入
首先是一个整数 t,表示有 t 组测试数据。(t <= 1000)
每组有四个整数 l, h, a, b ( 1 <= l, h, a, b <= 10^9 )。
输出
对于每组数据输出一行 “Case #c: x”,c 表示第几组测试数据(从1开始),
x 为结果,若不存在满足这些条件的整数,则结果为 -1。
样例输入
2
5 10 18 3
19 21 18 3
样例输出
Case #1: 6
Case #2: -1
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int t,l,h,a,b,z;
scanf("%d",&t);
for(int i=1;i<=t;i++)
{
int flag=0;
scanf("%d%d%d%d",&l,&h,&a,&b);
printf("Case #%d: ",i);
for(int j=a-1;j>=2;j--)
{
// printf("j=%d\n",j);
if(a%j==0)
{
z=a/j;
if(z%b==0&&z>=l&&z<=h)
{
printf("%d\n",z);
flag=1;
break;
}
if(flag==1)
break;
}
}
if(flag==0)
printf("-1\n");
}
return 0;
}