zoukankan      html  css  js  c++  java
  • [CSP-S模拟测试]:简单计算(数学)

    题目传送门(内部题104)


    输入格式

      第一行一个正整数$T$,表示该测试点内的数据组数,你需要对该测试点内的$T$组数据都分别给出正确的答案才能获得该测试点的分数。
      接下来$T$组数据,每组数据一行两个正整数$p,q$。


    输出格式

      对每组数据输出一行一个整数表示答案。


    样例

    样例输入:

    5
    1 1
    3 5
    5 3
    2 4
    4 2

    样例输出:

    1
    9
    7
    6
    4


    数据范围与提示

      对于$50\%$的数据,$1leqslant p,qleqslant 10,000$。
      对于$100\%$的数据,$1leqslant Tleqslant 1,000,1leqslant p,qleqslant 1000,000,000=1,000^3$。


    题解

    $$egin{array}{ll} 2sumlimits_{i=0}^pleftlfloorfrac{iq}{p} ight floor &=& sumlimits_{i=0}^pleftlfloorfrac{iq}{p} ight floor+leftlfloorfrac{(p-i)q}{p} ight floor \ &=& (p+1) imes q-sumlimits_{i=0}^p[(p|qi)?0:1] \ &=& (p+1) imes q-p+gcd(p,q)end{array}$$

    时间复杂度:$Theta(Tlogmax(p,q))$。

    期望得分:$100$分。

    实际得分:$100$分。


    代码时刻

    #include<bits/stdc++.h>
    using namespace std;
    long long p,q;
    int main()
    {
    	int T;scanf("%d",&T);
    	while(T--)
    	{
    		scanf("%lld%lld",&p,&q);
    		printf("%lld
    ",((p+1)*q-p+__gcd(p,q))>>1);
    	}
    	return 0;
    }
    

    rp++

  • 相关阅读:
    P2764 最小路径覆盖问题
    P1402 酒店之王 网络流
    P2597 [ZJOI2012]灾难 拓扑排序
    FJOI2017 矩阵填数
    2019.2.27模拟
    2019.2.26模拟
    SDOI2013 方程
    [AH2017/HNOI2017]抛硬币
    Lucas定理和扩展Lucas定理
    LuoguP4861 按钮
  • 原文地址:https://www.cnblogs.com/wzc521/p/11771048.html
Copyright © 2011-2022 走看看