zoukankan      html  css  js  c++  java
  • bzoj2659 [Beijing wc2012]算不出的算式

    Description

    算不出的算式
    背景:
                  曾经有一个老掉牙的游戏放在我面前,我没有珍惜。直到这个游戏停产才追悔莫及。人世间最痛苦的事情莫过于此,如果上天给我一个再玩一次的机会,我一定要,通关!
    题目描述:
           如果你真的很想玩这个游戏,那么就先看看我的题目吧,搞不定这些的话是没办法通关的哟。第一关其实很简单,只有一个关闭的有密码锁的大门。这大门上写着一个奇怪的算式,估计是要你利用它算出密码来开门吧(果然是老掉牙的情节)。

           传说中这个式子中的p和q是两个奇质数,等号右边算出来应该就是密码了吧,你是真的算不出来么?

    Input

    只有一行,两个奇质数,分别表示p,q。

    Output

           一个数,表示算式结果。

    Sample Input

    5 7

    Sample Output

    6

    HINT



    HINT:p,q在32位整型范围内。

     
    我来清理以前做过的题了
    先画出个坐标系,标出坐标为(p,q)的点,然后从(0,0)到(p,q)连一条线,画出以这条线为对角线的长方形。显然直线的斜率是p/q。
    你会发现Σ[kp/q]其实就是直线下方的整点数,而Σ[kq/p]就是直线上方的整点数。
    计算p==q的时候还要考虑直线上有整点的情况
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    #include<queue>
    #include<deque>
    #include<set>
    #include<map>
    #include<ctime>
    #define LL long long
    #define inf 0x7ffffff
    #define pa pair<int,int>
    #define pi 3.1415926535897932384626433832795028841971
    using namespace std;
    inline LL read()
    {
        LL x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    int main()
    {
    	LL a=read(),b=read();
    	if (a==b) printf("%lld
    ",(a-1ll)*(b+1ll)/4ll);
    	else printf("%lld
    ",(a-1ll)*(b-1ll)/4ll);
    }
    ——by zhber,转载请注明来源
  • 相关阅读:
    HDU3336 Count the string —— KMP next数组
    CodeForces
    51Nod 1627 瞬间移动 —— 组合数学
    51Nod 1158 全是1的最大子矩阵 —— 预处理 + 暴力枚举 or 单调栈
    51Nod 1225 余数之和 —— 分区枚举
    51Nod 1084 矩阵取数问题 V2 —— 最小费用最大流 or 多线程DP
    51Nod 机器人走方格 V3 —— 卡特兰数、Lucas定理
    51Nod XOR key —— 区间最大异或值 可持久化字典树
    HDU4825 Xor Sum —— Trie树
    51Nod 1515 明辨是非 —— 并查集 + 启发式合并
  • 原文地址:https://www.cnblogs.com/zhber/p/4116413.html
Copyright © 2011-2022 走看看