[USACO16JAN] Subsequences Summing to Sevens S
题目描述
Farmer John’s N N N cows are standing in a row, as they have a tendency to do from time to time. Each cow is labeled with a distinct integer ID number so FJ can tell them apart. FJ would like to take a photo of a contiguous group of cows but, due to a traumatic childhood incident involving the numbers 1 … 6 1 \ldots 6 1…6, he only wants to take a picture of a group of cows if their IDs add up to a multiple of 7.
Please help FJ determine the size of the largest group he can photograph.
给你n个数,分别是a[1],a[2],…,a[n]。求一个最长的区间[x,y],使得区间中的数(a[x],a[x+1],a[x+2],…,a[y-1],a[y])的和能被7整除。输出区间长度。若没有符合要求的区间,输出0。
输入格式
The first line of input contains N N N ( 1 ≤ N ≤ 50 , 000 1 \leq N \leq 50,000 1≤N≤50,000). The next N N N
lines each contain the N N N integer IDs of the cows (all are in the range
0 … 1 , 000 , 000 0 \ldots 1,000,000 0…1,000,000).
输出格式
Please output the number of cows in the largest consecutive group whose IDs sum
to a multiple of 7. If no such group exists, output 0.
样例 #1
样例输入 #1
7
3
5
1
6
2
14
10
样例输出 #1
5
提示
In this example, 5+1+6+2+14 = 28.
题解
准备国庆假期了,脑子也变得不太好使,这种题我居然没有第一时间想到答案,非常难受。因为脑子进水了,所以我看了别人C++的题解,看到:
(
A
−
B
)
m
o
d
n
u
m
≡
0
(A-B) \bmod num \equiv 0
(A−B)modnum≡0
等价于
A
≡
B
m
o
d
n
u
m
A\equiv B \bmod num
A≡Bmodnum
唉,这个同余定理这么常用,为什么我时不时就把它给忘记呢?
大家可以去参考一下大佬的题解:题解 P3131 【[USACO16JAN]子共七Subsequences Summing to Sevens】
这里给出对应的Python代码:
def Solution2():
N = int(input())
Prefix = 0
yvshu = {i: [] for i in range(7)}
for i in range(N):
Prefix += int(input())
yvshu[Prefix%7].append(i+1)
ans = max(yvshu[0]) if yvshu[0] else 0
for key in yvshu.keys():
if len(yvshu[key]) > 1:
ans = max(ans, yvshu[key][-1] - yvshu[key][0])
print(ans)
Solution2()
关于上面那个定理的题我还可以提供一题:
Ringo’s Favorite Numbers 2