SUOI #69 奔跑的Aqua

这个题……不会啊

0.001模拟可以发现一些规律

请教了一下物理dalao

设泽尔帝跑出去 \(L\) ,Aqua用时 \(T\) ,初距 \(X\)

\(\int_{0}^{T}V_A\sin\theta(t)\ dt\ =\ L\)

\(\int_{0}^{T}(V_A-V_Z\sin\theta(t))\ dt\ =\ X\)

#include <cstdio>
#include <algorithm>

using std::swap;

const int MOD=1075757;

inline int Norm(int a){
    return (a%MOD+MOD)%MOD;
}

int sr;
int sum(int a, int b){
    sr=a+b;
    if(sr>=MOD) sr-=MOD;
    return sr;
}

int mul(int a, int b){
    return (int)((1LL*a*b)%(1LL*MOD));
}

int T;
int Inv[MOD];

struct Pos{
    int x, y;
    Pos(){}
    Pos(int _x, int _y){x=_x;y=_y;}
    void read(){
        scanf("%d%d", &x, &y);
        x=Norm(x);y=Norm(y);
    }
    void show(){
        printf("%d %d\n", x, y);
    }
} A, Z, D, Ans;

Pos operator + (Pos A, Pos B){
    return Pos(sum(A.x, B.x), sum(A.y, B.y));
}

Pos operator - (Pos A, Pos B){
    return Pos(sum(A.x, MOD-B.x), sum(A.y, MOD-B.y));
}

Pos operator * (Pos A, int k){
    return Pos(mul(A.x, k), mul(A.y, k));
}

int Va, Vz;
int K, Len;

int main(){
    
    Inv[0]=1;Inv[1]=1;
    for(int i=2;i<MOD;++i)  Inv[i]=mul(Inv[MOD%i], MOD-MOD/i);
    
    scanf("%d", &T);
    
    while(T--){
        
        A.read();Z.read();
        scanf("%d%d", &Va, &Vz);
        
        K=mul(Va, Inv[Vz]);
        K=mul(K, mul(Inv[sum(K, MOD-1)], Inv[sum(K, 1)]));
        
        D=Z-A;swap(D.x, D.y);D.x=MOD-D.x;D=D*K;
        
        Ans=Z+D;
        
        Len=sum(mul(D.x, D.x), mul(D.y, D.y));
        Len=mul(Len, mul(Inv[Vz], Inv[Vz]));
        
        printf("%d\n", Len);
        Ans.show();
        
    }
    
    return 0;
}

转载于:https://www.cnblogs.com/Pickupwin/p/SUOI0069.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值