您的位置:首页 > 其它

UVa 12627 (递归 计数 找规律) Erratic Expansion

2015-04-13 13:41 447 查看
直接说几个比较明显的规律吧。

#include <cstdio>
typedef long long LL;

LL f(LL r, LL k)
{
if(k == 0) return 1LL;
if(r & 1LL) return f((r+1)/2 ,k-1) * 2;
else return f(r/2, k-1);
}

LL g(LL r, LL k)
{
if(r == 0) return 0;
if(k == 0) return 1LL;
LL ans = g(r/2, k-1) * 3;
if(r & 1) ans += f(r, k);
return ans;
}

int main()
{
int T; scanf("%d", &T);
for(int kase = 1; kase <= T; kase++)
{
LL k, a, b;
scanf("%lld%lld%lld", &k, &a, &b);
printf("Case %d: %lld\n", kase, g(b, k) - g(a-1, k));
}

return 0;
}


代码君
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: