题目链接: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[] = {, };
__int64 t = x;
int p = ;
while (x)
{
sum[p] += x % ;
x /= ;
p = !p;
}
if (sum[]-sum[] != && t % == )
return false;
if (sum[]-sum[] == && t % != )
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 ;
}