扩展哈夫曼编码
#include <stdio.h> #include <iostream> using namespace std; int gcd(long long m, long long n) { if(n == 0) return m; return gcd(n, m%n); } void Cal(long long a, long long b, long long &x, long long &y) // ax + by = gcd(a,b) { if(b == 0) { x = 1; y = 0; return ; } Cal(b, a%b, x, y); long long temp_x = x; long long temp_y = y; x = temp_y; y = temp_x - a/b*y; return ; } int main() { long long x, y, m, n, l; // (n-m)*i + l*k = x-y scanf("%lld%lld%lld%lld%lld", &x, &y, &m, &n, &l); if((x-y) % gcd((n-m),l)) printf("Impossible\n"); else { long long i, k; // i次跳跃, k个完整圈 Cal(n-m, l, i, k); // (n-m)*i + l*k = gcd((n-m),l) i = ((x-y)/gcd((n-m),l) * i) % l; if(i < 0) i += l; printf("%lld\n", i); } return 0; }
posted on 2015-09-04 15:58 huashunli 阅读(1783) 评论(0) 编辑 收藏 举报