#include<bits/stdc++.h>
using namespace std ;
const int N = 2e6+9 ;
#define ll long long
int main(){
ios::sync_with_stdio(0); cin.tie(0);cout.tie(0);
ll n ; cin >> n ;
vector<ll>v(n),Buy(2);
for( int i = 0 ; i <n ; i ++ ) cin >> v[ i ] ;
sort( v.begin() , v.end() ) ;
ll ans = 0 , idx = 0 ;
queue<ll>A,Free; //A:当前未购买的商品队列,Free:当前可以免费的价格队列
for( int i = n-1 ; i >= 0 ; i -- ) A.push( v[ i ] ) ;
while( !A.empty() ){
ll x = A.front() ; A.pop() ;
if( !Free.empty() && x <= Free.front() ){ Free.pop() ; continue ; } //这个商品要是可以免费的话就免费
Buy[idx++] = x ; //不行的话就买它
if( idx >= 2 ){
ans += Buy[0]+Buy[1] ; Free.push( min( Buy[0] , Buy[1] )/2 ) ; idx = 0 ; //每买两个商品增加一个免费机会
}
}
while( idx > 0 ) ans += Buy[--idx] ; //处理掉没凑成对的需要购买的商品
cout << ans << "\n" ;
return 0 ;
}
这是一段 C++ 代码,实现了一个购物车的功能。首先输入一个整数 n,表示商品的数量,接下来输入 n 个整数,表示每个商品的价格。然后按照价格从小到大排序,从最贵的商品开始,每次可以选择购买两个商品,如果这两个商品的价格相同,则可以免费获得一个价格为这两个商品价格的平均数的商品。最后输出购买所有商品所需的最小花费。
代码中使用了 STL 中的 vector、queue 等容器,以及 sort 函数等算法。其中,vector 用于存储商品价格,queue 用于实现购买两个商品后获得免费商品的功能。