ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[BJOI2012]算不出的等式 题解

2021-02-15 21:02:20  阅读:236  来源: 互联网

标签:printf 算不出 题目 int 题解 BJOI2012 样例 long 公式


题目来源:[Beijing wc2012];
原题网址:https://www.lydsy.com/JudgeOnline/problem.php?id=2659
bzoj P2659
附原题:
题目描述

背景:
曾经有一个老掉牙的游戏放在我面前,我没有珍惜。直到这个游戏停产才追悔莫及。人世间最痛苦的事情莫过于此,如果上天给我一个再玩一次的机会,我一定要,通关!
题目描述:
如果你真的很想玩这个游戏,那么就先看看我的题目吧,搞不定这些的话是没办法通关的哟。第一关其实很简单,只有一个关闭的有密码锁的大门。这大门上写着一个奇怪的算式,估计是要你利用它算出密码来开门吧(果然是老掉牙的情节)。
传说中这个式子中的p和q是两个奇质数,等号右边算出来应该就是密码了吧,你是真的算不出来么?
在这里插入图片描述
输入
只有一行,两个奇质数,分别表示p,q。
输出
一个数,表示算式结果。
样例输入
5 7
样例输出
6
提示
HINT:p,q在32位整型范围内。

题解内容

首先,要来看一看题目,题目比较简单的,但是,这是一到数学题
不多说,0.1版本TLE代码

#include<cstdio>
using namespace std;
int s,p,q;
int main(){
    scanf("%d%d",&p,&q);
    for(int i=1;i<=(p-1)>>1;i++)
        s+=i*q/p;
    for(int i=1;i<=(q-1)>>1;i++)
        s+=i*p/q;
    printf("%d",s);
    return 0;
}

简单的for循环来解决这一道题
然而~~~~~

在这里插入图片描述
TLE

分析原因:这是在int范围内的,int的范围是2147483648,直接爆掉

然后,由于是数学题,所以,只要把公式推出来就是了,但是推公式有这么简单吗???因为有向下取整,所以,就是一道数论题了
首先呢,就是想到数学老师的数形结合,献上图片:

在这里插入图片描述
由于是向下取整,所以,你会发现一个公式:这些的和就是这个这个长方形的面积,而且,q,p都是质数,所以,所有的点都不会与方格的角重合,这样,就可以使用公式了。即为 (q-1)*(p-1)/4
推出结果后,就可以把0.2版WA代码推出来了。
代码如下:

#include<cstdio>
using namespace std;
long long p,q;
int main(){
    scanf("%d%d",&p,&q);
    printf("%lld",(p-1)/2*(q-1)/2);
	return 0;
}

然后测评出结果:
在这里插入图片描述
没错,错误10%,也就是说,这个公式并不能推出所有状态的,来一组反例:(当q==p的时候,上图的线就会与方格的顶点重合了)
样例输入
3 3
样例输出
2
实际输出
1
进行多次的推理后,我们发现当q=p的时候,我们的公式不管用了。
在看一些输入:

样例输入 样例输出 实际输出
3 3 2 1
5 5 6 4
7 7 12 9
11 11 30 25

发现公式了吗?
当p==q时,由于重合,所以重合的点还要加上 \(1\) ,也就是说,总和还要加上(q-1)/ 2
最后,终于做好了AC代码
献上代码:

#include<cstdio>
using namespace std;
long long p,q;
int main(){
    scanf("%d%d",&p,&q);
    if(q==p)printf("%lld",(p-1)*(q-1)/4+(p-1)/2);
    else
    printf("%lld\n",(p-1)*(q-1)/4);
	return 0;
}

在这里插入图片描述
END.

标签:printf,算不出,题目,int,题解,BJOI2012,样例,long,公式
来源: https://www.cnblogs.com/jiangtaizhe001/p/14404438.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有