Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
就是个线代的题,附代妈#include <iostream> using namespace std; long long int gcd(long long int a, long long int b){ if(a == 0 && b == 0) return 0; if(a == 0) return b; if(b == 0) return a; if(a > b) return gcd(b, a%b); else return gcd(a, b%a); } bool gx(long long int *a, long long int *b){ return (a[1]*b[2] == a[2]*b[1]) && (a[1]*b[3] == a[3]*b[1]) && (a[2]*b[3] == a[3]*b[2]); } long long int hls(long long int *a, long long int *b, long long int *c){ return a[1]*b[2]*c[3] + b[1]*c[2]*a[3] + c[1]*a[2]*b[3] - a[3]*b[2]*c[1] - b[3]*c[2]*a[1] - c[3]*a[2]*b[1]; } int main() { long long int a[4], b[4], c[4], d[4]; char C; cin >> a[1] >> C >> a[2] >> C >> a[3]; cin >> b[1] >> C >> b[2] >> C >> b[3]; cin >> c[1] >> C >> c[2] >> C >> c[3]; cin >> d[1] >> C >> d[2] >> C >> d[3]; if(gx(a,b) && gx(a,c)){ if(!gx(a,d)){ cout << "impossible" << endl; } else{ cout << "1:0:0" << endl; } return 0; } long long int y1 = hls(d,b,c), y2 = hls(a,d,c), y3 = hls(a,b,d); if(hls(a,b,c) != 0){ if(y1 < 0 || y2 < 0 || y3 < 0){ y1 = -y1, y2 = -y2, y3 = -y3; } if(y1 < 0 || y2 < 0 || y3 < 0){ cout << "impossible" << endl; } else{ long long int x1 = y1*(a[1]+a[2]+a[3]), x2 = y2*(b[1]+b[2]+b[3]), x3 = y3*(c[1]+c[2]+c[3]); long long int GCD = gcd(x3, gcd(x1,x2)); if(GCD != 0) { x1 /= GCD, x2 /= GCD, x3 /= GCD; } cout << x1 << ':' << x2 << ':' << x3 << endl; } return 0; } if(y1 != 0 || y2 != 0 || y3 != 0){ cout << "impossible" << endl; return 0; } //如果x3=0 if(a[1]*b[2] != a[2]*b[1]){ long long int x1 = (d[1]*b[2]-d[2]*b[1]), x2 = (a[1]*d[2]-a[2]*d[1]); if(x1 < 0){ x1 = -x1; x2 = -x2; } if(x1>=0 && x2>=0 && a[3]*x1+b[3]*x2==d[3]*(a[1]*b[2]-a[2]*b[1])){ x1*=(a[1]+a[2]+a[3]); x2*=(b[1]+b[2]+b[3]); long long int GCD = gcd(x1,x2); x1 /= GCD, x2 /= GCD; cout << x1 << ':' << x2 << ':' << 0 << endl; return 0; } } if(a[1]*b[3] != a[3]*b[1]){ long long int x1 = (d[1]*b[3]-d[3]*b[1]), x2 = (a[1]*d[3]-a[3]*d[1]); if(x1 < 0){ x1 = -x1; x2 = -x2; } if(x1>=0 && x2>=0 && a[2]*x1+b[2]*x2==d[2]*(a[1]*b[3]-a[3]*b[1])){ x1*=(a[1]+a[2]+a[3]); x2*=(b[1]+b[2]+b[3]); long long int GCD = gcd(x1,x2); x1 /= GCD, x2 /= GCD; cout << x1 << ':' << x2 << ':' << 0 << endl; return 0; } } if(a[3]*b[2] != a[2]*b[3]){ long long int x1 = (d[2]*b[3]-d[3]*b[2]), x2 = (a[2]*d[3]-a[3]*d[2]); if(x1 < 0){ x1 = -x1; x2 = -x2; } if(x1>=0 && x2>=0 && a[1]*x1+b[1]*x2==d[1]*(a[2]*b[3]-a[3]*b[2])){ x1*=(a[1]+a[2]+a[3]); x2*=(b[1]+b[2]+b[3]); long long int GCD = gcd(x1,x2); x1 /= GCD, x2 /= GCD; cout << x1 << ':' << x2 << ':' << 0 << endl; return 0; } } //x2=0 if(a[1]*c[2] != a[2]*c[1]){ long long int x1 = (d[1]*c[2]-d[2]*c[1]), x2 = (a[1]*d[2]-a[2]*d[1]); if(x1 < 0){ x1 = -x1; x2 = -x2; } if(x1>=0 && x2>=0 && a[3]*x1+c[3]*x2==d[3]*(a[1]*c[2]-a[2]*c[1])){ x1*=(a[1]+a[2]+a[3]); x2*=(c[1]+c[2]+c[3]); long long int GCD = gcd(x1,x2); x1 /= GCD, x2 /= GCD; cout << x1 << ':' << 0 << ':' << x2 << endl; return 0; } } if(a[1]*c[3] != a[3]*c[1]){ long long int x1 = (d[1]*c[3]-d[3]*c[1]), x2 = (a[1]*d[3]-a[3]*d[1]); if(x1 < 0){ x1 = -x1; x2 = -x2; } if(x1>=0 && x2>=0 && a[2]*x1+c[2]*x2==d[2]*(a[1]*c[3]-a[3]*c[1])){ x1*=(a[1]+a[2]+a[3]); x2*=(c[1]+c[2]+c[3]); long long int GCD = gcd(x1,x2); x1 /= GCD, x2 /= GCD; cout << x1 << ':' << 0 << ':' << x2 << endl; return 0; } } if(a[3]*c[2] != a[2]*c[3]){ long long int x1 = (d[2]*c[3]-d[3]*c[2]), x2 = (a[2]*d[3]-a[3]*d[2]); if(x1 < 0){ x1 = -x1; x2 = -x2; } if(x1>=0 && x2>=0 && a[1]*x1+c[1]*x2==d[1]*(a[2]*c[3]-a[3]*c[2])){ x1*=(a[1]+a[2]+a[3]); x2*=(c[1]+c[2]+c[3]); long long int GCD = gcd(x1,x2); x1 /= GCD, x2 /= GCD; cout << x1 << ':' << 0 << ':' << x2 << endl; return 0; } } //x1=0 if(b[1]*c[2] != b[2]*c[1]){ long long int x1 = (d[1]*c[2]-d[2]*c[1]), x2 = (b[1]*d[2]-b[2]*d[1]); if(x1 < 0){ x1 = -x1; x2 = -x2; } if(x1>=0 && x2>=0 && b[3]*x1+c[3]*x2==d[3]*(b[1]*c[2]-b[2]*c[1])){ x1*=(b[1]+b[2]+b[3]); x2*=(c[1]+c[2]+c[3]); long long int GCD = gcd(x1,x2); x1 /= GCD, x2 /= GCD; cout << 0 << ':' << x1 << ':' << x2 << endl; return 0; } } if(b[1]*c[3] != b[3]*c[1]){ long long int x1 = (d[1]*c[3]-d[3]*c[1]), x2 = (b[1]*d[3]-b[3]*d[1]); if(x1 < 0){ x1 = -x1; x2 = -x2; } if(x1>=0 && x2>=0 && b[2]*x1+c[2]*x2==d[2]*(b[1]*c[3]-b[3]*c[1])){ x1*=(b[1]+b[2]+b[3]); x2*=(c[1]+c[2]+c[3]); long long int GCD = gcd(x1,x2); x1 /= GCD, x2 /= GCD; cout << 0 << ':' << x1 << ':' << x2 << endl; return 0; } } if(b[3]*c[2] != b[2]*c[3]){ long long int x1 = (d[2]*c[3]-d[3]*c[2]), x2 = (b[2]*d[3]-b[3]*d[2]); if(x1 < 0){ x1 = -x1; x2 = -x2; } if(x1>=0 && x2>=0 && b[1]*x1+c[1]*x2==d[1]*(b[2]*c[3]-b[3]*c[2])){ x1*=(b[1]+b[2]+b[3]); x2*=(c[1]+c[2]+c[3]); long long int GCD = gcd(x1,x2); x1 /= GCD, x2 /= GCD; cout << 0 << ':' << x1 << ':' << x2 << endl; return 0; } } cout << "impossible" << endl; return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator