6 solutions

  • 5
    @ 2025-5-9 17:08:53

    此题无解

  • 2
    @ 2025-5-9 17:27:06

    666,怎么还能-3 ???!!!

    • 1
      @ 2025-5-9 17:15:23

      这个,刚才搞错了,现在,这个题的正解是: #include............. 只需54188元即可开通全文阅读

    • -2
      @ 2025-5-9 17:17:23

      豆包的答案:#include #include #include <unordered_set> #include using namespace std;

      int main() { int n; cin >> n; vector a(n); // 输入每只兔子的数字 for (int i = 0; i < n; ++i) { cin >> a[i]; }

      // 统计0的数量
      int zero_count = count(a.begin(), a.end(), 0);
      // 统计1的数量
      int one_count = count(a.begin(), a.end(), 1);
      // 统计-1的数量
      int minus_one_count = count(a.begin(), a.end(), -1);
      
      // 计算非零元素的乘积
      long long product = 1;
      bool overflow = false;
      for (int num : a) {
          if (num != 0) {
              if (abs(product) > 1e18 / abs(num)) {
                  overflow = true;
              }
              product *= num;
              // 控制乘积的大小,防止溢出
              if (abs(product) > 1e18) {
                  if (product > 0) product = 1e18;
                  else product = -1e18;
              }
          }
      }
      
      unordered_set<long long> unique_values;
      // 遍历每只兔子,计算移除后的乘积
      for (int i = 0; i < n; ++i) {
          long long new_product;
          if (a[i] == 0) {
              if (zero_count == 1) {
                  // 移除唯一的0,新乘积为原来的非零乘积
                  new_product = product;
              } else {
                  // 移除一个0后仍有0,新乘积为0
                  new_product = 0;
              }
          } else {
              if (zero_count > 0) {
                  // 原乘积为0,移除一个非零数后新乘积为0
                  new_product = 0;
              } else {
                  // 原乘积非零,计算新乘积
                  if (overflow) {
                      // 处理溢出情况
                      if (abs(a[i]) == 1) {
                          // 移除1或-1,乘积可能变化
                          if (a[i] == 1) {
                              if (one_count == 1) {
                                  // 移除唯一的1,乘积变化
                                  new_product = product;
                              } else {
                                  // 还有其他1,乘积不变
                                  new_product = product;
                              }
                          } else { // a[i] == -1
                              if (minus_one_count == 1) {
                                  // 移除唯一的-1,乘积符号改变
                                  new_product = -product;
                              } else {
                                  // 还有其他-1,乘积可能不变
                                  new_product = product;
                              }
                          }
                      } else {
                          // 移除绝对值大于1的数,乘积变化
                          new_product = product / a[i];
                      }
                  } else {
                      // 未溢出情况,直接计算
                      new_product = product / a[i];
                  }
              }
          }
          // 如果新乘积与原乘积不同,则加入集合
          if (zero_count == 0 ? new_product != product : new_product != 0) {
              unique_values.insert(new_product);
          }
      }
      
      cout << unique_values.size() << endl;
      return 0;
      

      }

      • -2
        @ 2025-5-6 21:44:22

        uniqueunique去重,特判一下0011

        移除11没有影响。

        有一个00时答案为11 (测试用例 1,71,7 ),有大于一个00时答案为00 (测试用例 2,82,8)。

        #include<bits/stdc++.h>
        #define ll long long
        using namespace std;
        int n,a[100010];
        inline void solve(){
        	scanf("%d",&n);
        	bool one = false;
        	int zero = 0;
        	for (int i=1;i<=n;++i){
        		scanf("%d",&a[i]);
        		if (a[i] == 1) one = true;
        		if (a[i] == 0) ++zero;
        	}
        	sort(a+1,a+1+n);
        	n = unique(a+1,a+1+n) - (a+1);
        	if (zero==1) printf("1\n");
        	else if (zero>1) printf("0\n");
        	else printf("%d\n",n-one);
        }
        int main(){
            solve();
            return 0;
        }
        
        • -3
          @ 2025-5-9 17:18:08

          #include<bits/stdc++.h> #define ll long long using namespace std;

          int n, a[100010]; // 输入数组及长度

          inline void solve() { scanf("%d", &n); // 读取数组长度 bool one = false; // 标记是否存在元素1 int zero = 0; // 统计0的个数

          // 读取数组并统计特性
          for (int i = 1; i <= n; ++i) {
              scanf("%d", &a[i]);
              if (a[i == 1]) one = true;    // 存在1时标记为true
              if (a[i] == 0) ++zero;        // 统计0的数量
          }
          
          // 排序去重操作
          sort(a + 1, a + 1 + n);           // 升序排序
          n = unique(a + 1, a + 1 + n) - (a + 1); // 去重后获取新长度
          
          // 决策逻辑
          if (zero == 1) 
              printf("1\n");    // 唯一0元素时的特殊处理
          else if (zero > 1)
              printf("0\n");    // 多个0元素时的结果
          else
              printf("%d\n", n - one); // 无0时的计算逻辑:去重后元素数 - (是否包含1)
          

          }

          int main() { solve(); return 0; } 注释

          • 1

          Information

          ID
          1472
          Time
          1000ms
          Memory
          256MiB
          Difficulty
          9
          Tags
          (None)
          # Submissions
          211
          Accepted
          24
          Uploaded By