• poj 1061


    哎,折腾了一中午,终于ac拉。考察的是欧拉算法的扩展。我在此题中,思考的时间最长的部分就是通过扩展了欧拉算法得到了解后,如何得到最小的正整数解。对于这个小问题,我却百思不得其解。然后在网上找了解题报告后,才有了思路,就是先求出解系,然后通过这个解系的式子得到最小的整数解

    #include <iostream>
    #include <cmath>
    using namespace std;
    void gcd(long long a,long long b,long long &gcdd,long long  &w,long long &t)
    {
    	if(b==0)
    	{
    		gcdd=a;w=1;t=0;
    	}
    	else
    	{
    		gcd(b,a%b,gcdd,t,w);
    		t-=w*(a/b);
    	}
    }
    int main()
    {
    	long long x,y,m,n,l;
    	while(cin>>x>>y>>m>>n>>l)
    	{
    		bool flag=false;
    		long long  dl=y-x;
    		long long  ds=m-n;
    		if(ds<0)
    		{
    			ds=-ds;
    			flag=true;
    		}
    		long long  gcdd,t,w;
    		gcd(l,ds,gcdd,w,t);
    		if(dl%gcdd!=0) cout<<"Impossible"<<endl;
    		else
    		{
    			t*=(dl/gcdd);
    			if(flag)
    				t=-t;
    			l=l/gcdd;
    			if(t<0)//这一步还可优化,但是目前还没看懂网上的代码
    			{
    				while(t<0) t+=l;
    			}
    			else
    			{
    				while(t>0) t-=l;
    				t+=l;
    			}
    			cout<<t<<endl;
    		}
    	}
    	return 0;
    }
      


  • 相关阅读:
    59. Spiral Matrix II
    58. Length of Last Word
    57. Insert Interval
    56. Merge Intervals
    55. Jump Game
    54. Spiral Matrix
    53. Maximum Subarray
    52. N-Queens II
    51. N-Queens
    java封装学习
  • 原文地址:https://www.cnblogs.com/lj030/p/3002300.html
Copyright © 2020-2023  润新知