10789 神秘指数 数组 枚举 check

解决思路

 
  • 计算总和:首先计算所有神秘物品的神秘指数和 sum。

 

  • 枚举分组数:从 n 开始枚举分组数 i,尝试将神秘物品分成 i 组。
 
  • 检查分组可行性:对于每个分组数 i,检查是否可以将神秘物品分成 i 组且每组的神秘指数和相同。
 
  • 输出结果:找到最小的可行分组数 i,输出每组的神秘指数和。
    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int N = 1e3 + 10;
    int n, a[N], sum;
    
    // 检查是否可以将神秘物品分成 x 组且每组的神秘指数和相同
    bool check(int x) {
        int val = sum / x; // 每组的目标和
        int cnt = 0; // 当前组的和
        for (int i = 1; i <= n; i++) {
            cnt += a[i];
            if (cnt == val) {
                cnt = 0; // 当前组和达到目标,开始新的一组
            } else if (cnt > val) {
                return false; // 当前组和超过目标,分组失败
            }
        }
        return cnt == 0; // 检查最后一组是否正好达到目标和
    }
    
    int main() {
        // 读取神秘物品的数量
        cin >> n;
        // 读取每个神秘物品的神秘指数值,并计算总和
        for (int i = 1; i <= n; i++) {
            cin >> a[i];
            sum += a[i];
        }
        
        // 从 n 开始枚举分组数,找到最小的可行分组数
        for (int i = n; i >= 1; i--) {
            if (sum % i == 0 && check(i)) {
                cout << sum / i; // 输出每组的神秘指数和
                break;
            }
        }
        
        return 0;
    }

     

posted @ 2024-09-30 16:51  CRt0729  阅读(45)  评论(0编辑  收藏  举报