题目链接:http://codeforces.com/problemset/problem/340/A

这道题目理解不难,就是在[a, b]区间内,找出同时能够被x和y整除的个数。第一次想当然的开了两个2·109的数组,分别标记能被x和y的数字,内存受不了,返回CE。仔细想了下,开这么大的一个数组没有必要,直接在[a, b]枚举每一个数,能够同时整除x和y的数就统计下来,过了PT,然而很快就被hacked(还是第一次遇到的= =,不过也好,能帮助养成严谨的思维);  第三次,稍稍改良了算法,求x和y的最小公倍数,在[a, b]的范围内累加最小公倍数的个数,直到大于b为止,然而没考虑到最小公倍数有可能小于a,于是wa。第四次,改正这个错误后,再次PT,然后又被hacked。一题被hacked两次,前无古人,后无来者啊~~~彻底绝望,不知道哪里有错......第二天再做,重交被hacked的代码(比赛中貌似被hacked的数据没有给出的)TLE,算法太差啦!!!估计被hacked的原因就是如此吧。

说了那么多废话,步入正题。

先肯定往最小公倍数的方向想是正确的。问题就出在枚举那部分,2·109,数据量太大!不优化肯定过不了!由于是要统计同时被x和y整除的个数,那么符合条件的数肯定满足: 1 * M,2 * M,3 * M,......N * M(M表示x和y的最小公倍数)。问题就转化为在[a, b]中找到有多少个M。我的做法是,从a往后开始枚举,直到遇上第一个能同时被x和y整除的数(假设为 i );接着从b往前开始枚举,也是直到遇上第一个能同时被x和y整除的数(假设为 j )。最后的结果就是 ( j - i ) / 最小公倍数 + 1  。 这个算式的意思为:j / 最小公倍数:[1, b]之前有多少个能同时整除x和y的数,i / 最小公倍数:[1, a]之前有多少个能同时整除x和y的数,+1是因为相减之后大于等于a的第一个能同时整除x和y的数实质是没有统计的。

 #include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std; int gcd(int x, int y) // 求最小公倍数
{
while (x != y)
{
if (x > y)
x = x - y;
else
y = y - x;
}
return x;
} int main()
{
int x, y, a, b, i;
while (scanf("%d%d%d%d", &x, &y, &a, &b) != EOF)
{
int temp = x / gcd(x, y) * y;
// printf("temp = %d\n", temp);
i = (a > temp ? a : temp); // i 保证要在[a, b]区间内,以便后面的枚举操作
while (i % x || i % y) // 找出第一个在[a, b]区间中能同时整除x和y的数
i++;
// printf("i = %d\n", i);
while (b % x || b % y) // 找出最后一个在[a, b]区间中能同时整除x和y的数
b--;
// printf("b = %d\n", b);
printf("%d\n", (b - i) / temp + );
}
return ;
}

codeforces A. The Wall 解题报告的更多相关文章

  1. Codeforces Round 665 赛后解题报告(暂A-D)

    Codeforces Round 665 赛后解题报告 A. Distance and Axis 我们设 \(B\) 点 坐标为 \(x(x\leq n)\).由题意我们知道 \[\mid(n-x)- ...

  2. Codeforces Round 662 赛后解题报告(A-E2)

    Codeforces Round 662 赛后解题报告 梦幻开局到1400+的悲惨故事 A. Rainbow Dash, Fluttershy and Chess Coloring 这个题很简单,我们 ...

  3. 【LeetCode】554. Brick Wall 解题报告(Python)

    [LeetCode]554. Brick Wall 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fux ...

  4. Codeforces Round #277.5 解题报告

    又熬夜刷了cf,今天比正常多一题.比赛还没完但我知道F过不了了,一个半小时贡献给F还是没过--应该也没人Hack.写写解题报告吧= =. 解题报告例如以下: A题:选择排序直接搞,由于不要求最优交换次 ...

  5. codeforces B. Simple Molecules 解题报告

    题目链接:http://codeforces.com/problemset/problem/344/B 题目意思:这句话是解题的关键: The number of bonds of an atom i ...

  6. codeforces 591A. Wizards' Duel 解题报告

    题目链接:http://codeforces.com/problemset/problem/591/A 题目意思:其实看下面这幅图就知道题意了,就是Harry 和 He-Who-Must-Not-Be ...

  7. codeforces 582A. GCD Table 解题报告

    题目链接:http://codeforces.com/problemset/problem/582/A 网上很多题解,就不说了,直接贴代码= = 官方题解: http://codeforces.com ...

  8. codeforces 581C. Developing Skills 解题报告

    题目链接:http://codeforces.com/problemset/problem/581/C 题目意思:给出 n 个数:a1, a2, ..., an (0 ≤ ai ≤ 100).给出值 ...

  9. codeforces 577B. Modulo Sum 解题报告

    题目链接:http://codeforces.com/problemset/problem/577/B 题目意思:就是给出 n 个数(a1, a2, ..., an) 和 m,问能不能从这 n 个数中 ...

随机推荐

  1. Android中获取图片的宽和高

    在Android中,我们想获取图片的宽和高应该怎么办?一.正常加载图片的方法下获取宽和高 举一个简单的例子:创建一个图片的副本 //加载原图 Bitmap bmSrc = BitmapFactory. ...

  2. 41.Android之图片放大缩小学习

    生活中经常会用到图片放大和缩小,今天简单学习下. 思路:1.添加一个操作图片放大和缩小类;  2. 布局文件中引用这个自定义控件;  3. 主Activity一些修改. 代码如下: 增加图片操作类: ...

  3. href="javascript:void(0)"

    javascript:是伪协议,表示url的内容通过javascript执行.void(0)表示不作任何操作,这样会防止链接跳转到其他页面.这么做往往是为了保留链接的样式,但不让链接执行实际操作,具体 ...

  4. 【poj1001】 Exponentiation

    http://poj.org/problem?id=1001 (题目链接) 题意 求实数R的n次方,要求高精度. Solution SB题Wa了一下午,直接蒯题解. 高精度,小数点以及去前导后导零很麻 ...

  5. codevs1225 八数码难题

    题目描述 Description Yours和zero在研究A*启发式算法.拿到一道经典的A*问题,但是他们不会做,请你帮他们.问题描述 在 3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数 ...

  6. C#用UPnP穿透内网

    参考了网上的一篇文章,由于时间长了,具体地址不知道了. 引入了一个DLL: Interop.NATUPNPLib.dll,实现穿透局域网,进行Socket通信. using System; using ...

  7. 蓝桥T291(BFS + 输出路径)

    http://lx.lanqiao.org/problem.page?gpid=T291 学霸的迷宫   时间限制:1.0s   内存限制:256.0MB      问题描述 学霸抢走了大家的作业,班 ...

  8. JavaScript模块化学习基础

    http://www.ruanyifeng.com/blog/2012/10/javascript_module.html 一.原始写法 模块就是实现特定功能的一组方法. 不同函数简单放在一起就算一个 ...

  9. hdu 2049 不容易系列之(4)——考新郎

    在本博AC代码中,求CNM用的是Anm/amm没用阶乘的形式,两者皆可 #include <stdio.h> int main(void) { long long a,b,larr[21] ...

  10. linux下防火墙开启某个端口号及防火墙常用命令使用

    linux防火墙常用命令 1.永久性生效,重启后不会复原 开启:chkconfigiptables on 关闭:chkconfigiptables off 2.即时生效,重启后复原 重启防火墙 方式一 ...