3 条题解

  • 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-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-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
      标签
      (无)
      递交数
      185
      已通过
      27
      上传者