您的位置:首页 > 其它

ACM程序设计选修课——1036: Hungar的菜鸟赛季(YY)

2016-05-12 16:43 344 查看

1036: Hungar的菜鸟赛季

Time Limit: 1 Sec Memory Limit: 64 MB

Submit: 20 Solved: 14

[Submit][Status][Web
Board]

Description

我们都知道对于一个新秀来说,发挥稳定 是一件很困难的事情,特别是对于Hungar 这种状态型选手来说,他现在已经打完了很 多场比赛,已知这么多场打完的比赛里,他 的最少得分是A分,最高得分是B分,Hungar对于数学中的质数一直特别喜欢,他现在遇到个问题,如果每次我可以对A加上某个质数,直到A==B为止,那么最多可以执行多少次增加操作呢?

Hungar打完球实在是太累了,只能靠你来解决这个问题了,如果他不能解决这个问题,会影响他的发挥,所以你一定要尽快帮他解决哦!

Input

第一行一个整数T(T <=20), 代表有T组数据.

对于每一组数据,包含两个整数A, B (1 <= A <= B <= 100000).

Output

最多的操作次数.

Sample Input

4
2 2
3 7
4 10
1 8

Sample Output

0
2
3
3

HINT

输入数据保证有解.

这题之前用我自己所谓的DP过是因为数据太水了,那个代码根本就是错的(输入1 3居然给我输出0),又回头看了一下发现题目中说数据保证有解,然后纸上列了几组发现很多的数都可以被表示为2*a+3*b的形式即2*(a+b)+b的形式。那么此题就是求Max{a+b}

那么就让n一直减去3直到成为一个偶数,直接除以2这样一来就可以做到最大的操作次数了。

代码:

#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<sstream>
#include<cstring>
#include<cstdio>
#include<string>
#include<deque>
#include<cmath>
#include<queue>
#include<set>
#include<map>
using namespace std;
int main(void)
{
int n,a,b,t,ans;
cin>>t;
while (t--)
{
cin>>a>>b;
if(a==b)
{
cout<<0<<endl;
continue;
}
ans=0;
b-=a;
while (b%2!=0)
{
b=b-3;
ans++;
}
ans=ans+b/2;
cout<<ans<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: