竞赛
考级
题目分析 有 nnn 件商品,买一件物品可以免费再拿一件,问买完所有的商品最少花费多少钱。 贪心策略,每次只买剩下中最便宜那个即可,可以先对价格排序,前 ⌈n2⌉\lceil\frac{n}{2}\rceil⌈2n ⌉ 的价格的和即为答案。 AC 代码 现在,数组下标从 1 开始读取输入,排序函数也正确地排序了数组元素。 复杂度 排序加求和,O(n⋅logn+n)O(n \cdot log_{n} + n)O(n⋅logn +n)。
AC君
这道题真的差点把本狗气*!要不是本狗害题无数可能就倒这了没满分就已经倒这了好不好呜呜呜 说实话,本狗这道题真的很可惜,你就看我代码吧,你一看一个不吱声 开始正经讲题! 这道题叭叭半天实际就是拼多多砍一刀,是兄弟你就来! 反正你买一个砍一个,直接砍一半了,这不是拼多多这是啥??? 狗の提示:记得排序哦~ AC代码: Wonderful Answer代码:
复仇者_ドラゴンコア
这题也是贪心,排个序,把最便宜的一半买了就行 用read函数可以大幅度缩短输入时间 时间复杂度:O(nlog2n)O(nlog_2n)O(nlog2 n)
复仇者_帅童
#include<bits/stdc++.h> using namespace std; const int N=1e6+10; int a[N]; int main() { int n; cin>>n; for(int i=0;i<n;i++)cin>>a[i]; sort(a,a+n); if(n%2==0){ n/=2; }else{ n=n/2+1; } int ans=0; for(int i=0;i<n;i++){ ans+=a[i]; } cout<<ans; return 0; }
绝区零.安比
思路:本题主要考察贪心算法。我们可以先进行升序排,之后的策略是买最便宜的,送最贵的。所以可以用双指针。定义I为买的指针,J为送的指针。然后在I<=JI<=JI<=J的情况下,ANS+AIANS+A_IANS+AI 。 代码:
༺དༀ༒∞░∞༒ༀཌ༻
#include<bits/stdc++.h> using namespace std; int a[10000000]; bool cmp(int x,int y){ return x > y; } int main(){ int n,sum = 0; cin>>n; for(int i = 0;i < n;i++)cin>>a[i]; sort(a,a + n); if(n%2==0){ n/=2; } else{ n=n/2+1; } for(int i = 0;i < n;i++){ sum+=a[i]; } cout<<sum; return 0; }
135****9859
沈思邈
有事找大号
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; int a[1000100]; for(int i=0;i<n;i++){ cin>>a[i]; } sort(a,a+n); long long sum=0; for(int i=0;i<n/2;i++){ sum+=a[i]; } if(n%2==1){ sum+=a[n/2+1]; } cout<<sum; return 0; }
199****5448
zsy
提交答案之后,这里将显示提交结果~