File tree Expand file tree Collapse file tree
atcoder/AtCoder Beginner Contest 433 Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -38,4 +38,4 @@ def solve():
3838 print (ans )
3939
4040if __name__ == "__main__" :
41- solve ()
41+ solve ()
Original file line number Diff line number Diff line change 1+ class Solution :
2+ def prefixesDivBy5 (self , nums : List [int ]) -> List [bool ]:
3+ ans = [False ] * len (nums )
4+ x = 0
5+ for i ,bit in enumerate (nums ):
6+ x = (x << 1 | bit ) % 5
7+ ans [i ] = x == 0
8+ return ans
Original file line number Diff line number Diff line change 1+ class Solution {
2+ public:
3+ int maxSumDivThree (vector<int >& nums) {
4+ // 计算所有数字的总和
5+ int s = accumulate (nums.begin (), nums.end (), 0 );
6+
7+ // 如果总和已经能被3整除,直接返回
8+ if (s % 3 == 0 ) return s;
9+
10+ // 按照模3的余数分组:a[0]存余数为0的,a[1]存余数为1的,a[2]存余数为2的
11+ vector<int > a[3 ];
12+ for (int num: nums) {
13+ a[num % 3 ].push_back (num);
14+ }
15+
16+ // 对余数为1和2的数组排序,方便后续取最小值
17+ sort (a[1 ].begin (), a[1 ].end ());
18+ sort (a[2 ].begin (), a[2 ].end ());
19+
20+ // 如果总和模3余2,交换a[1]和a[2],统一处理为"需要移除余数为1的元素"
21+ // 这样后续逻辑只需要考虑移除1个或2个最小元素的情况
22+ if (s % 3 == 2 ) {
23+ swap (a[1 ], a[2 ]);
24+ }
25+
26+ // 方案1:移除1个最小的余数为1的元素
27+ int ans = a[1 ].size () ? s - a[1 ][0 ] : 0 ;
28+
29+ // 方案2:移除2个最小的余数为2的元素(因为2+2=4,4%3=1,相当于移除1)
30+ // 取两种方案的最大值
31+ if (a[2 ].size () > 1 ) {
32+ ans = max (ans, s - a[2 ][0 ] - a[2 ][1 ]);
33+ }
34+
35+ return ans;
36+ }
37+ };
You can’t perform that action at this time.
0 commit comments