2 solutions

  • 0
    @ 2025-4-8 20:21:08

    思路

    mod everything

    易错点1:单个值也要取模!!因为所有输入值最大都是1e18,所以每个值都要取模

    易错点2:负数要加mod(a * b * c取模后可能会小于d * e * f)

    易错点3:两两相乘时也要取模

    #include<bits/stdc++.h>
    
    using namespace std;
    const int mod=998244353;
    int main(){
    	freopen("abc.in","r",stdin);
    	freopen("abc.out","w",stdout);
    	long long a,b,c,d,e,f;
    	cin>>a>>b>>c>>d>>e>>f;
    	long long cnt1=(((a%mod)*(b%mod)%mod)*(c%mod))%mod;
    	long long cnt2=(((d%mod)*(e%mod)%mod)*(f%mod))%mod;
    	long long res=((cnt1-cnt2)+mod)%mod;
    	cout<<res;
    	return 0;
    } 
    
    • @ 2025-4-8 22:08:37

      教训在何处,高亮出来,用什么样的数据测?

    • @ 2025-4-9 16:38:23

      @ 测试样例:

      354351423453

      544234212423

      643523324523

      121345354234

      244654346453

      144665478778

      检查是否有负数

  • -1
    @ 2025-4-9 13:15:42
    #include <cstdio>
    #define MOD 998244353
    
    // hack: a * b * c % MOD < d * e * f % MOD
    
    long long a, b, c, d, e, f, abc_sum, def_sum, ans;
    FILE * fin, * fout;
    
    long long mul_mod(long long a, long long b, long long c)
    {
        return (a % MOD) * (b % MOD) % MOD * (c % MOD) % MOD;
    }
    
    int main()
    {
        fin = fopen("abc.in", "rb");
        fout = fopen("abc.out", "wb");
    
        fscanf(fin, "%lld %lld %lld %lld %lld %lld", &a, &b, &c, &d, &e, &f);
    
        abc_sum = mul_mod(a, b, c);
        def_sum = mul_mod(d, e, f);
    
        ans = (abc_sum - def_sum + MOD) % MOD;
    
        fprintf(fout, "%lld", ans);
    
        return 0;
    }
    
    • 1

    Information

    ID
    1100
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    9
    Tags
    (None)
    # Submissions
    134
    Accepted
    14
    Uploaded By