您的位置:首页 > 其它

BestCoder5 1001 Poor Hanamichi(hdu 4956) 解题报告

2014-08-17 22:07 489 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4956(它放在题库后面的格式有一点点问题啦,所以就把它粘下来,方便读者观看)





  题目意思:给出一个范围 [l, r] 你, 问是否能从中找到一个数证明 Hanamichi’s solution 的解法是错的。

Hanamichi’s solution 是这样的:

对于某个数 X,从右往左数它的每一位数字(假设第一位是从0开始数)。它 偶数位的数字之和 - 奇数位的数字之和 = 3 而且 这个 X 满足函数 X mod 11 = 3 。

一开始见数据范围达到1e18 就刹时吓坏了,怕暴力超时,于是比赛的时候,就不敢做咯~~~~点知,原来可以啦,真奇怪= =

一个个枚举即可,题目有点长,意思有点难明,关键是太多干扰的地方,例如这句:



纯粹是吓人滴 = =

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

bool check(__int64 x)
{
int sum[2] = {0, 0};
__int64 t = x;
int p = 0;
while (x)
{
sum[p] += x % 10;
x /= 10;
p = !p;
}
if (sum[0]-sum[1] != 3 && t % 11 == 3)
return false;
if (sum[0]-sum[1] == 3 && t % 11 != 3)
return false;
return true;
}

int main()
{
__int64 l, r;
int T;
while (scanf("%d", &T) != EOF)
{
while (T--)
{
scanf("%I64d%I64d", &l, &r);

__int64 tmp = l;
while (tmp <= r)
{
if (!check(tmp))
break;
tmp++;
}
if (tmp > r)
printf("-1\n");
else
printf("%I64d\n", tmp);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: