qbxt 2018.10.1test&std

Problem A. sum
File: sum.*
Time limit: 1s
Memory limit: 256MB

某些数有奇怪的性质:它十进制下的各位数的平方和的 T 倍等于它本身。求在 [A, B] 范围内的数有多少满足这个性质。
Input
第一行包含三个整数 T, A, B(1 ≤ T, A, B ≤ 1018, A ≤ B)。
Output
一个整数,表示满足条件的的数量。
Examples
Input
Output
51 5000 10000
3
Subtasks
对于 40% 的数据,T, A, B ≤ 100000, A ≤ B。对于 100% 的数据,T, A, B ≤ 1018, A ≤ B。

std:枚举数字,计算量不会超过91818。(我枚举成了[a,b]内的每个数字)

#include<bits/stdc++.h>

using namespace std;

typedef unsigned long long ull;

ull k,a,b,ans;

int dos(ull);

int main()
{
	scanf("%lld%lld%lld",&k,&a,&b);
	for(int i=1;i<=2000;i++)
	  {
	  	if(a <= i*k && i <= b/k)
	  	  if(dos(i*k) == i) ans++;
	  }
	printf("%lld",ans);
}

inline int dos(ull x)
{
	int cnt=0;
	while(x) cnt+=(x%10)*(x%10),x/=10;
	return cnt;
}

Problem B. guess
File: guess.*
Time limit: 3s
Memory limit: 256MB
有这样一个赌博游戏:一些奖品被藏在了一排 N 个柜中,每个柜中可能包含零或一个奖品。每次你可以询问第 X 到第 Y 个柜中奖品数量的奇偶性,如果你能够确定所有奖品的位置就可以赢得所有奖品。当然,每次询问都是要付出一定金额的,对区间 [X, Y ] 进行询问需要支付 CX,Y元,求最少需要多少钱可以百分百确定每个奖品的位置。
Input
第一行包含一个整数 N (1 ≤ N ≤ 500),表示柜数量。
接下来 N 行,第 i + 1 行包含 n + 1 − i 个整数,其中第 j 个数表示 Ci,i+j−1。
Output
一个整数,表示最少需要的钱数。
Examples
Input
Output
5 7 1 2 3 4 5 4 3 2 1 3 4 5 2 1 5
Subtasks
对于 40% 的数据,N ≤ 5。对于 60% 的数据,N ≤ 10。
对于 100% 的数据,N ≤ 500 1 ≤ CX,Y≤ 109。

Problem C. xor
File: xor.*
Time limit: 3s
Memory limit: 256MB
给出一个 n × m 的网格,每个格上有权值 ai,j,现在要从 (1, 1) 走到 (n, m),每次只能向右或向下走, 沿路计算异或和,求异或和等于 k 的路径数。
Input
第一行包含三个整数 n, m, k(1 ≤ n, m ≤ 20, 0 ≤ k ≤ 1018)。接下来 n 行,每⾏包含 m 个整数,表⽰⽹格上的权值。
Output
一个整数,表示路径数。
Examples
Input
Output
3 3 11
3 2 1
5 7 10
0 1 2

6 4
Subtasks
对于 30% 的数据,n, m ≤ 4。对于 60% 的数据,n, m ≤ 10。
对于 100% 的数据,n, m ≤ 20, 1 ≤ ai,j≤ 1018, 1 ≤ k ≤ 1018。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值