1 solutions

  • 1
    @ 2024-11-15 14:57:42

    题目即统计满足x+y<zx+y<z的方案数

    容易想到枚举一个,O(1)O(1)计算方案数,但是细节有点多,不好码

    还有一种做法是枚举x+yx+y,设当前枚举到的x+yx+yii

    那么需要计算的有两个:

    1.满足i<zi<zzz的数量,这个非常简单

    2.满足x<=yx<=yx+y=ix+y=i(x,y)(x,y)的数量,这个稍微麻烦一点

    考虑如何计算2:

    如果xxAA,那么yyiAi-A

    如果xxA+1A+1,那么yyiA1i-A-1

    ...

    如果xxBB,那么yyiBi-B

    容易观察到y的变化范围为[iB,iA][i-B,i-A]

    不过yy还需要在[B,C][B,C]之内,取区间交就行了

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    signed main(){
        int a,b,c,d;
        cin>>a>>b>>c>>d;
        int ans=0;
        for(int i=a+b;i<=b+c;i++){
            if(i>=c){
                int l=max(i-b,b),r=min(i-a,c);//区间交
                int cnt=min(i-c,d-c+1);
                ans+=cnt*(r-l+1);
            }
        }
        cout<<ans<<endl;
        return 0;
    }
    
    • 1

    Information

    ID
    611
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    9
    Tags
    (None)
    # Submissions
    36
    Accepted
    3
    Uploaded By