QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#217375#6620. Linear Fractional TransformationzhuibaoWA 219ms3964kbC++202.3kb2023-10-16 20:13:052023-10-16 20:13:05

Judging History

你现在查看的是最新测评结果

  • [2023-10-16 20:13:05]
  • 评测
  • 测评结果:WA
  • 用时:219ms
  • 内存:3964kb
  • [2023-10-16 20:13:05]
  • 提交

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 n=3;

double ffabs(complex<double>x)
{
    return x.real()*x.real()+x.imag()*x.imag();
}

void gauss()
{
    int r,c;
    for(r=0,c=0;c<n;c++)
    {
        int t=r;
        for(int i=c;i<n;i++)
        {
            if(ffabs(a[i][c])>ffabs(a[t][c]))t=i;
        }
        if(ffabs(a[t][c])<eps)continue;
        swap(a[t],a[r]);
        for(int i=n;i>=c;i--)a[r][i]/=a[r][c];
        for(int i=r+1;i<n;i++)
        {
            if(ffabs(a[i][c])>eps)
            {
                for(int j=n;j>=c;j--)
                    a[i][j]-=a[r][j]*a[i][c];
            }
        }
        r++;
    }
    for(int i=n-1;i>=0;i--)
        for(int j=i+1;j<n;j++)
            a[i][n]-=a[j][n]*a[i][j];
}

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: 3900kb

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: 219ms
memory: 3964kb

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.423076923077 -0.384615384615
4 -4
0.8 -0.6
-1.33333333333 -0.666666666667
-0.7 0.1
-1.5 1.5
-1.3 0.4
-4.5 0.5
0.411764705882 -0.352941176471
0.4 -1.2
-1 -1
0.615384615385 -1.07692307692
-2 -2.22044604925e-16
-nan -nan
2 0
-0.71724137931 -0.606896551724
-1.46153846154 1.69230769231
-1.29411...

result:

wrong answer 1st numbers differ - expected: '1.0000000', found: '2.2000000', error = '1.2000000'