首页 > 显生之宙
头像 AliLexiWalker
发表于 2026-03-13 00:43:09
这题可以把操作理解成“拿一个数当扩音器,把它的值广播给别人然后自己消失”。 最优策略很直观:只要当前最小数是负的,就让它给所有剩余数都加一次(这样降得最快);一旦最小数已经不负了,继续操作只会让结果变大,所以直接把剩下的数一路合并,答案就是当前总和。 void solve(){ int n; 展开全文
头像 芊落土里土气土
发表于 2024-03-23 00:58:57
#include <bits/stdc++.h> using namespace std ; typedef long long int ll ; ll t , n , s , p ; int flag ; int main ( ) { cin >> t ; 展开全文
头像 kilomatutinal
发表于 2026-03-13 15:51:32
这道题就是一个简简单单的贪心喵~简单引导一下喵如果值全是非负数的话,比如“0,2,4,5”来说,答案肯定是把所有数加起来就行了喵!只要有负数的话,比如“-2,-1,3,29,33”来说,想得到最小答案就有点绕了喵。第一步肯定是把后面所有数全部和第一个-2加一起才对喵。这样-2对答案影响最大喵!就变成 展开全文
头像 olone
发表于 2026-03-13 12:12:29
import java.util.*; public class Main{ static Scanner in = new Scanner(System.in); public static void solve(){ int n = in.nextInt(); 展开全文
头像 BeauWill
发表于 2026-03-13 00:59:22
方法一:模拟、贪心、差分先考虑暴力,由于有区间修改,想到使用差分进行模拟。模拟的时候可以贪心地想到: 若当前的最小值是负数,为了最小化最后的结果,就将后续的所有数全都加上这个负数;若当前的最小值不是负数,那么只找一个数加上,为了方便,就找第一个大于等于它的数即可。因此需要先对数组a排序 展开全文
头像 蒟蒻果冻01
发表于 2026-03-13 11:19:43
思路很简单,负数或0加到全局,正数加到最大的数,排序后从小到大依次处理。C++代码很短。注意到某些正数加了负数之后可能会变成负数或0,继续加到全局即可。 #include <bits/stdc++.h> using int64 = int64_t; using namespace std 展开全文
头像 此在Dasein
发表于 2026-03-13 05:38:10
1. 问题分析 首先,分析单次操作对数列总和的影响: 操作描述:选定一个数 ,将其加到数列中至少一个其他数上,然后移除 。 数学表达:设当前选中的数为 ,选中的目标集合为 (其中 )。 操作后,这些数变为 。 数列的总和变化量 。 目标:最小化最后的剩余值。 由于最后只会剩下一个数,这个数 展开全文
头像 为芙宁娜献出心脏
发表于 2026-03-13 09:36:44
很简单的思路,不难看出贪心的来做,我们要从小到大排好序之后,如果有负数就让所有其他数字都加上这个数,然后继续看下一个数是否是负数 如果所有数字都会变成负数,那么最后累加的结果就是我们要的答案 如果不是所有数字都会变成负数,那么最后我们要将剩下的所有数字加上前面负数的总和的结果求和 详细代码如下: / 展开全文
头像 chenlan114
发表于 2026-03-13 10:01:20
#include<bits/stdc++.h> using namespace std; using ll=long long; int main(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); ll T; 展开全文
头像 lemonyyds
发表于 2026-03-13 12:09:34
#include <bits/stdc++.h> using namespace std; #define int long long signed main(){ ios::sync_with_stdio(0); int T;cin>>T; whil 展开全文