zoukankan      html  css  js  c++  java
  • C. Yet Another Counting Problem(循环节规律)

    (给出a,b,l,r,求在区间[l,r]内有多少x满足x%a%b!=x%b%a)

    (--------------------分割!!~----------------------------)

    (打个表很快发现规律,以a*b为循环节,每个循环节内满足条件的数都相同,那直接前缀和查询)

    (算出[1,r]满足条件的数,算出[1,l-1]满足条件的数,相减即可)

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll t,q,l,r,a,b,s[2009];
    ll cal(ll x){
    	return x/(a*b)*s[a*b]+s[x%(a*b)];
    }
    int main()
    {
    	cin>>t;
    	while(t--)
    	{
    		cin>>a>>b>>q;
    		for(int i=1;i<=a*b;i++)
    			s[i]=s[i-1]+(i%a%b!=i%b%a);
    		while(q--)
    		{
    			cin>>l>>r;
    			cout<<cal(r)-cal(l-1)<<endl;//利用前缀和 
    		}
    	}
    }
    
  • 相关阅读:
    0803C#如何高效读取EXCEL文件
    0711笔记
    笔记0709
    0708:XML专题
    笔记0705
    笔记0704
    笔记0627
    笔记0626
    gridview合并单元格
    笔记0624
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12822242.html
Copyright © 2011-2022 走看看