• 【补题日记】[2022牛客暑期多校2]I-let fat tension


    Pro

    https://ac.nowcoder.com/acm/contest/33187/I

    Sol

    其实是个简单的计算题,不过比赛的时候榜被带歪了所以没人看这个题。

    接下来化简式子(增加的下标o的含义为Y向量的每个分量的下标): Y i n e w = ∑ j = 1 n ∑ p = 1 k X i p ⋅ X j p ∣ X i ∣ ⋅ ∣ X j ∣ Y i Y_{i}^{new}=\sum_{j=1}^{n}\sum_{p=1}^{k}\frac{X_{ip}·X_{jp}}{|X_i|·|X_j|}Y_{i} Yinew=j=1np=1kXiXjXipXjpYi
    Y i , o n e w = ∑ j = 1 n ∑ p = 1 k X i p ⋅ X j p ∣ X i ∣ ⋅ ∣ X j ∣ Y i , o Y_{i,o}^{new}=\sum_{j=1}^{n}\sum_{p=1}^{k}\frac{X_{ip}·X_{jp}}{|X_i|·|X_j|}Y_{i,o} Yi,onew=j=1np=1kXiXjXipXjpYi,o
    Y i , o n e w = ∑ j = 1 n ∑ p = 1 k X i p ∣ X i ∣ ⋅ X j p ∣ X j ∣ Y i , o Y_{i,o}^{new}=\sum_{j=1}^{n}\sum_{p=1}^{k}\frac{X_{ip}}{|X_i|}·\frac{X_{jp}}{|X_j|}Y_{i,o} Yi,onew=j=1np=1kXiXipXjXjpYi,o
    Y i , o n e w = ∑ p = 1 k ( X i p ∣ X i ∣ ⋅ ∑ j = 1 n X j p ∣ X j ∣ Y i , o ) Y_{i,o}^{new}=\sum_{p=1}^{k}(\frac{X_{ip}}{|X_i|}·\sum_{j=1}^{n}\frac{X_{jp}}{|X_j|}Y_{i,o}) Yi,onew=p=1k(XiXipj=1nXjXjpYi,o)

    Z p , o = ∑ j = 1 n X j p ∣ X j ∣ Y i , o Z_{p,o}=\sum_{j=1}^{n}\frac{X_{jp}}{|X_j|}Y_{i,o} Zp,o=j=1nXjXjpYi,o,则
    Y i , o n e w = ∑ p = 1 k ( X i p ∣ X i ∣ ⋅ Z p , o ) Y_{i,o}^{new}=\sum_{p=1}^{k}(\frac{X_{ip}}{|X_i|}·Z_{p,o}) Yi,onew=p=1k(XiXipZp,o)

    可以输入完后直接预处理 X i , p ∣ X i ∣ \frac{X_{i,p}}{|X_i|} XiXi,p X j , p ∣ X j ∣ \frac{X_{j,p}}{|X_j|} XjXj,p,可以看出来计算 Z p , o Z_{p,o} Zp,o Y i , o n e w Y_{i,o}^{new} Yi,onew的时间复杂度均为 O ( n k d ) O(nkd) O(nkd)

    Code

    //By cls1277
    #include
    using namespace std;
    typedef long long LL;
    #define Fo(i,a,b) for(LL i=(a); i<=(b); i++)
    #define Ro(i,b,a) for(LL i=(b); i>=(a); i--)
    #define Eo(i,x,_) for(LL i=head[x]; i; i=_[i].next)
    #define Ms(a,b) memset((a),(b),sizeof(a))
    #define endl '\n'
    
    const LL maxn = 1e4+5;
    LL n, k, d;
    double x[maxn][55], y[maxn][55], z[maxn][55], ans[maxn][55];
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        #ifdef DEBUG
        freopen("data.txt","r",stdin);
        #endif
        cin>>n>>k>>d;
        Fo(i,1,n) {
            double len = 0;
            Fo(j,1,k) {
                cin>>x[i][j];
                len += x[i][j]*x[i][j];
            }
            len = sqrt(len);
            Fo(j,1,k) x[i][j] /= len;
        }
        Fo(i,1,n)
            Fo(j,1,d)
                cin>>y[i][j];
        Fo(i,1,n)
            Fo(j,1,k)
                Fo(l,1,d)
                    z[j][l] += x[i][j]*y[i][l];
        Fo(i,1,n)
            Fo(j,1,d)
                Fo(l,1,k)
                    ans[i][j] += x[i][l]*z[l][j];
        Fo(i,1,n) {
            Fo(j,1,d)
                cout<<fixed<<setprecision(8)<<ans[i][j]<<' ';
            cout<<endl;
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
  • 相关阅读:
    JSP:Javabean
    【Star项目】小帽飞机大战(一)
    java编程基础总结——20.foreach遍历及lambda表达式
    【前端】HTML认知
    vued中图片路径与主机路径相关联,例如img:‘http://127.0.0.1:8000/media/data/els.jpg‘
    ssm计算机系统结构综合考核管理系统 毕业设计源码26480
    华为机试真题 C++ 实现【运维日志排序】
    C语音-笔记
    【CNN-FPGA开源项目解析】卷积层02--floatAdd16模块
    无序容器unodered_map
  • 原文地址:https://blog.csdn.net/cls1277/article/details/126006101