3 条题解

  • 1
    @ 2025-11-5 20:19:11
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #define ll long long
    using namespace std;
    
    int main()
    {
        ios::sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
        ll t,a,b,c,d;
        cin>>t;
        while(t--){
            ll sum=0;
            cin>>a>>b>>c>>d;
            ll L2=b/2-(a-1)/2;
            ll L1013=b/1013-(a-1)/1013;
            ll L2026=b/2026-(a-1)/2026;
            ll R2=d/2-(c-1)/2;
            ll R1013=d/1013-(c-1)/1013;
            ll R2026=d/2026-(c-1)/2026;
            sum=L2026*(d-c+1)+(L2-L2026)*R1013+(L1013-L2026)*R2+((b-a+1)-L2-L1013+L2026)*R2026; 
            // l是2026倍数,r任意
            // l是2不是1013,r1013倍数
            // l是1013不是2026,r偶数
            // l不是2不是1013但前两个都包含2026所需再加2026,r2026
            cout<<sum<<"\n";
        }
        return 0;
    }
    
    • 0
      @ 2025-11-5 20:35:56
      int main()
      #define int long long
      {
      	int t;
      	int a,b,c,d;
      	scanf("%lld",&t);
      	while(t--){
      		scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
      		int x2=(b/2)-(a-1)/2;
      		int y2=(d/2)-(c-1)/2;
      		int x1013=(b/1013)-(a-1)/1013;
      		int y1013=(d/101sb3)-(c-1)/1013;
      		int x2026=(b/2026)-(a-1)/2026;
      		int y2026=(d/2026)-(c-1)/2026;
      		int sum=0;
      		sum=(x2-x2026)*(y101oo3-y2026);
      		sum=sum+(y2-y2026)*(x1013-x2026);
      		sum=sum+x2026*(d-c+1);
      		sum=sum+y2026*(b-a+1)-x2026*y2026;
      		printf("%lld\n",sum);;
      	}
      	return 0;
      }
      
      • 0
        @ 2025-11-3 18:10:39
        void solve() {
            int a,b,c,d; cin >> a >> b >> c >> d;
            int ans = 0;
            int x2 = b/2 - (a-1)/2;            
            int x1013 = b/1013 - (a-1)/1013;       
            int x2026 = b/2026 - (a-1)/2026;        
            int y2 = d/2 - (c-1)/2;            
            int y1013 = d/1013 - (c-1)/1013;      
            int y2026 = d/2026 - (c-1)/2026;
            ans += x2026 * (d -c +1);           
            ans += y2026 * (b -a +1); 
            ans += (x2 - x2026) * (y1013 - y2026);                         
            ans += (x1013 - x2026) * (y2 - y2026);                        
            cout << ans - (x2026 * y2026) << endl;
        }
        
        • @ 2025-11-3 18:11:24

          通过分解因数、统计各倍数区间数量,再用容斥原理排除重复计算,从而快速求出满足条件的整数对数量。

          1.首先,分解 (2026 = 2 * 1013)。要满足 (x * y) 是 2026 的倍数,需 x 和 y 的因数组合包含 2 和 1013。

          2.然后,分别计算区间 [a,b] 中是 2、1013、2026 倍数的 x 的数量(记为 x2, x1013, x2026),以及区间 [c,d]中是 2、1013、2026 倍数的 y 的数量(记为 y2, y1013, y2026)。

          3.最后,通过容斥原理组合这些数量:满足条件的对数 = ((x2 * y2 + x1013 * y1013 - x2026 * y2026) + (x2 * (y1013 - y2026) + x1013 * (y2 - y2026)) + (x2026* y2026)) 的等价变形

      • 1

      信息

      ID
      1170
      时间
      1000ms
      内存
      256MiB
      难度
      8
      标签
      (无)
      递交数
      191
      已通过
      30
      上传者