2 条题解

  • 0
    @ 2024-11-02 19:22:43

    数据生成器:

    #include<iostream>
    #include<bits/stdc++.h>
    #define int long long
    using namespace std;
    const int T=1e2,N=1e9;
    mt19937 rnd(time(nullptr));
    signed main(){
        freopen("triple10.in","w",stdout); 
        cout<<T<<"\n";
        for(int i=1;i<=T;i++) cout<<rnd()%1000+N-1000+1<<"\n";
        return 0;
    }
    
    
  • 0
    @ 2024-11-02 19:10:44

    ARC160B

    对 \(x,y,z\) 三个数中不同的数的数量分类讨论。

    \(x,y,z\) 互不相同时,答案为钦定 \(x<y<z\) 时的方案数 \(\times 6\) ;

    \(x,y,z\) 有两个数相同时,答案为钦定 \(x=y<z\) 时的方案数 \(\times 3\) 加钦定 \(x<y=z\) 时的方案数 \(\times 3\) 。

    \(x=y=z\) 时,答案为此时的方案数 \(\times 1\) 。

    \(x<y<z\) 与 \(x=y<z\) 的情况均可通过枚举 \(y\) 做到 \(O(\sqrt n)\) 。 \(x<y=z\) 与 \(x=y=z\) 的情况等价于 \(z^2\le n\) ,可以直接 \(O(1)\) 计算。

    总复杂度 \(O(T\sqrt{n})\) 。

    std

    #include<iostream>
    #define int long long
    using namespace std;
    int t,n,sq,ans;
    const int mod=998244353,inv=(mod+1)/2;
    long long x;
    signed main(){
        freopen("triple.in","r",stdin);
        freopen("triple.out","w",stdout); 
        cin>>t;
        while(t--){
            cin>>n;
            sq=0;
            while(sq*sq<=n) sq++;
            sq--;
            for(int i=2;i<=sq;i++) ans=(ans+6*(i-1)%mod*(n/i-i))%mod;
            for(int i=1;i<=sq;i++) ans=(ans+3*(n/i-i))%mod;
            ans=(ans+3*sq%mod*(sq-1)%mod*inv%mod+sq)%mod;
            cout<<ans<<"\n";
            ans=0;
        }
        return 0;
    }
    
  • 1

[a_little_cute Round 2] triple 第一题

信息

ID
1076
难度
9
分类
(无)
标签
(无)
递交数
8
已通过
3
通过率
38%
上传者