6 solutions
-
0
Guest MOD
-
-2
豆包的答案:#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
去重,特判一下和。
移除没有影响。
有一个时答案为 (测试用例 ),有大于一个时答案为 (测试用例 )。
#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
#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