Score(规律)

Score

Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 2   Accepted Submission(s) : 2
Problem Description
大 家都知道,pfz是“成电杰出学生”,在成电杰出学生的颁奖典礼上,lxh和pfz都没有听台上在说什么,而是在下面讨论当晚的美式足球比赛,lxh预测 说纽约巨人队今晚将会得到11分,pfz马上说不可能。因为通常来说美式足球比赛的得分只有3分和7分两种形式,无论怎么得分都不可能得到11分。想了一 会以后,lxh发现其实11分以上的分数都是可以得到,于是11就是最大的不可以得到的分数。现在问题来了,如果比赛的得分只有x分和y分两种形式,那么 最大的不可以得到的分数是多少呢?


 

 

Input
本题包括多组输入 每组输入2个整数x, y(2<=x, y<=10^8),x=y=0表示输入结束
 

 

Output
对于每组输入,输出一行,若存在一个最大的不可以得到的分数,则输出此分数,否则输出Inf
 

 

Sample Input
3 7 2 2 0 0
 

 

Sample Output
11 Inf
题解;互素的时候等于inf,这个没啥问题,但是求最大不可能解的时候出现问题了,老在想着ax+by的x,y为正,就想找最小正整数,但是没有c就不会写了,看了网上的代码是个规律,不知道怎么得来的。。。。。a*b-a-b;
代码:
 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 #include<cstdlib>
 5 #include<cmath>
 6 #include<cstring>
 7 using namespace std;
 8 const int INF=0x3f3f3f3f;
 9 typedef long long LL;
10 void e_gcd(LL a,LL b,LL &d,LL &x,LL &y){
11     if(!b){
12         d=a;
13         x=1;y=0;
14     }
15     else{
16         e_gcd(b,a%b,d,x,y);
17         LL temp=x;
18         x=y;
19         y=temp-a/b*y;
20     }
21 }
22 void cal(LL a,LL b){
23     LL d,x,y;
24     e_gcd(a,b,d,x,y);
25     //printf("%lld %lld %lld %lld\n",a,b,x,y);
26     if(d!=1){
27         puts("Inf");
28         return;
29     }
30 /*    if(b<0)b=-b;
31     LL ans=x%b;
32     //printf("%lld\n",x);
33     if(ans<0)ans+=b;
34     if(a<0)a=-a;
35     y%=a;
36     if(y<0)y+=a;
37 //    printf("%lld %lld %lld\n",ans,t,y);
38     printf("%lld\n",max(a*ans-1,b*y-1);*/
39     printf("%lld\n",a*b-a-b);
40 }
41 int main(){
42     LL a,b;
43     while(~scanf("%lld%lld",&a,&b),a|b){
44         cal(a,b);
45     }
46     return 0;
47 }

 

 
posted @ 2015-10-27 15:36  handsomecui  阅读(363)  评论(0编辑  收藏  举报