QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#217387 | #6620. Linear Fractional Transformation | zhuibao | WA | 202ms | 3916kb | C++20 | 2.3kb | 2023-10-16 20:23:41 | 2023-10-16 20:23:41 |
Judging History
answer
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll; typedef unsigned long long ull; typedef pair<ll, ll>pi; typedef complex<double>cx;
#define int ll
#define X first
#define Y second
#define fer(i,a,n) for(int i=a;i<=n;i++)
#define ref(i,n,a) for(int i=n;i>=a;i--)
#define endl '\n'
#define mem(a,x) memset(a,x,sizeof a)
#define ac IO;int t;cin>>t;while(t--)solve()
#define AC signed main(){IO;solve();}
#define NO {cout<<"NO"<<endl;return;}
#define YES {cout<<"YES"<<endl;return;}
#define re(a) {cout<<a<<endl;return;}
#define all(v) v.begin(),v.end()
//ofstream fout("1.out", ios::out);
//ifstream fin("1.in", ios::in);
//#define cout fout
//#define cin fin
//--------------------瑞神神中神--------------------
const double eps=1e-6;
complex<double>a[5][5],z[5],w[5];
int equ=3,var=3;
double ffabs(complex<double>x)
{
return x.real()*x.real()+x.imag()*x.imag();
}
int gauss(){
int i,j,k,col,max_r;
for(k=0,col=0;k<equ&&col<var;k++,col++){
max_r = k;
for(i=k+1;i<equ;i++){
if(ffabs(a[i][col])> ffabs(a[max_r][col]))
max_r = i;
}
if(ffabs(a[max_r][col])<eps) return 0;
if(k!=max_r){
swap(a[k],a[max_r]);
}
for(j=col+1;j<=var;j++) a[k][j]/=a[k][col];
a[k][col] = 1;
for(i=0;i<equ;i++)
if(i!=k){
a[i][var] -= a[k][var]*a[i][col];
for(j=col+1;j<var;j++) a[i][j] -= a[k][j]*a[i][col];
a[i][col] = 0;
}
}
return 1;
}
void solve()
{
for(int i=0;i<3;i++)
{
double za,zb,wa,wb;
cin>>za>>zb>>wa>>wb;
z[i].real(za);z[i].imag(zb);w[i].real(wa);w[i].imag(wb);
a[i][0]=z[i];a[i][1].real(1);a[i][2]=w[i];a[i][3]=w[i]*z[i];
}
complex<double>z0;
double za,zb;cin>>za>>zb;
z0.real(za);z0.imag(zb);
complex<double>c=(w[0]-w[1])/(z[0]-z[1]);
complex<double>d=w[0]-(w[0]-w[1])/(z[0]-z[1])*z[0];
complex<double>ans;
if(ffabs(c*z[2]+d-w[2])<eps)
{
ans=c*z0+d;
}
else
{
gauss();
ans=(a[0][3]*z0+a[1][3])/(z0-a[3][3]);
}
cout<<setprecision(12)<<ans.real()<<' '<<ans.imag()<<'\n';
}
signed main()
{
ac;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3904kb
input:
2 -1 0 0 -1 0 1 -1 0 1 0 0 1 0 -1 -1 0 -1 0 0 1 0 -1 1 0 1 0 0 -1
output:
1 0 0 1
result:
ok 4 numbers
Test #2:
score: -100
Wrong Answer
time: 202ms
memory: 3916kb
input:
100000 0 0 -1 1 1 1 1 0 1 0 1 -1 -1 0 -1 -1 -1 1 1 -1 1 -1 -1 0 1 0 -1 -1 -1 -1 0 -1 -1 1 -1 -1 0 -1 0 0 1 1 1 0 0 -1 0 0 0 0 -1 -1 1 0 1 1 -1 -1 0 -1 0 1 1 -1 1 0 -1 -1 1 -1 0 1 1 -1 1 0 1 0 0 -1 0 1 -1 -1 1 1 -1 1 0 0 -1 -1 0 1 0 1 1 0 1 1 1 -1 0 1 -1 -1 1 0 -1 0 1 -1 1 0 -1 1 -1 -1 1 0 0 -1 0 1 0...
output:
2.2 1.4 0.4 -0.2 -2 -4 0.8 -0.6 -1 -0.666666666667 -0.7 -0.1 -1 1 -1.07692307692 0.384615384615 -3 5 0.25 -0.25 0.5 -1 -1.29411764706 -0.823529411765 0.5 -1.5 -2 0 -nan -nan 2 0 -0.8 -0.4 -0.724137931034 1.68965517241 -1.07692307692 1.38461538462 0 1 -1 -1 1.11022302463e-16 -0.5 -1 2 0.588235294118 ...
result:
wrong answer 1st numbers differ - expected: '1.0000000', found: '2.2000000', error = '1.2000000'