Codeforces Round #702 (Div. 3)---------------C. Sum of Cubes(对Python集合和列表的加深认识)
题目描述:
给定正整数,问是否存在整数
,
,满足
,使得
,存在则输出YES,不存在输出NO。共
组样例,对于每组样例,输入一个
,输出YES 或者NO,(
)
Example
Input
7 #t 代表样例数
1
2
4
34
35
16
703657519796
Output
NO
YES
NO
NO
YES
YES
YES
分析
a 与 b 可互换,且,所以两个数一定小于10000(
)所以可以存储a的三次方的值,然后用x减去
,看看结果在不在存储的值中
Python代码实现
1.用列表:用列表存储后看x-a^3是否在列表中,发现超时,百度后了解到元素是否在列表中采用遍历列表的方式实现。
import math
def getlist():
return [int(i) for i in input().split()]
def getmany():
return map(int,input().split())
def getstr():
return [str(i) for i in input().split()]
#--------------------------------------------------------------------------
l=[]
for a in range(1,10000):
l.append(a**3)
def solve():
x=int(input())
for i in l:
if x-i in l:
print("YES")
break
else:
print("NO")
#--------------------------------------------------------------------------
for _ in range(int(input())):
solve()
2.用集合:元素是否在集合中运用了哈希,大幅提升速度,AC了
import math
def getlist():
return [int(i) for i in input().split()]
def getmany():
return map(int,input().split())
def getstr():
return [str(i) for i in input().split()]
#--------------------------------------------------------------------------
s=set()
for a in range(1,10000):
s.add(a**3)
def solve():
x=int(input())
for i in s:
if x-i in s:
print("YES")
break
else:
print("NO")
#--------------------------------------------------------------------------
for _ in range(int(input())):
solve()