切圆圈

切圆圈

D e s c r i p t i o n Description Description

给定一个环形数组,保证数组元素之和为零,现在允许将数组进行切割,求最多分成多少个

总和为零的片段。

I n p u t Input Input

输入第一行给出一个正整数T,T≤200,代表测试数据的组数
每组数据在第一行给出一个整数 n,n≤10000,然后在第二行给出 n {n} n 个整数 1 ≤ ∣ A i ∣ ≤ 10000 1≤∣Ai∣≤10000 1Ai10000

O u t p u t Output Output

对于每组输入,在一行中输出一个正整数,代表最多片段的个数。

S a m p l e I n p u t Sample Input SampleInput

2
4
4 2 -4 -2
5
2 -3 4 -4 1

S a m p l e O u t p u t Sample Output SampleOutput

1
2

思 路 思路

只需要求个前缀和加上桶计数就行了

性质:如果前缀和 A i = A j A_i = A_j Ai=Aj 则说明 区间 [ i , j ] [i,j] [i,j] 总和为 0 0 0

注意数据范围,有负数

A C c o d e AC code ACcode

#include <bits/stdc++.h>
using namespace std;
#define int long long
int t, n, a[30005], f[30005], sum[30005], ans;

signed main()
{
    cin >> t;
    while (t--)
    {
        cin >> n;
        int ans = 0, res = 0;
        memset(sum, 0, sizeof sum);
        memset(f, 0, sizeof f);
        for (int i = 1; i <= n; i++)
        {
            cin >> a[i];
            f[i] = f[i - 1] + a[i];
            sum[f[i] + 10001]++;
            ans = max(ans, sum[f[i] + 10001]);
        }
        cout << ans << endl;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用OpenCV库来实现对图像中轮廓最小包围圆圈的截取。具体步骤如下: 1. 使用OpenCV库读入图像,将其转换为灰度图像,并进行二值化处理。 ```python import cv2 img = cv2.imread('image.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) ``` 2. 使用OpenCV库的findContours函数找到图像中的轮廓,并使用drawContours函数将其绘制在原图上。 ```python contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) cv2.drawContours(img, contours, -1, (0, 0, 255), 2) ``` 3. 对于每个轮廓,使用minEnclosingCircle函数找到最小包围圆,并使用circle函数在原图上绘制出该圆。 ```python for contour in contours: (x, y), radius = cv2.minEnclosingCircle(contour) center = (int(x), int(y)) radius = int(radius) cv2.circle(img, center, radius, (0, 255, 0), 2) ``` 4. 对于每个最小包围圆,使用片操作在原图上截取出其所包含的部分。 ```python for i, contour in enumerate(contours): (x, y), radius = cv2.minEnclosingCircle(contour) x, y, radius = int(x), int(y), int(radius) crop = img[y - radius:y + radius, x - radius:x + radius] cv2.imwrite('crop_{}.jpg'.format(i), crop) ``` 完整代码如下: ```python import cv2 img = cv2.imread('image.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) for i, contour in enumerate(contours): (x, y), radius = cv2.minEnclosingCircle(contour) x, y, radius = int(x), int(y), int(radius) crop = img[y - radius:y + radius, x - radius:x + radius] cv2.imwrite('crop_{}.jpg'.format(i), crop) cv2.imshow('img', img) cv2.waitKey(0) cv2.destroyAllWindows() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值