2 条题解
-
0
贪心。
为了让每次优惠价值最大化,我们一定是优先对价格 的物品使用优惠券。
剩下的物品中,因为再用之后价格会变为 ,所以原价格越大越赚。
#include<bits/stdc++.h> using namespace std; int a[200005]; int main(){ int n,k,x; cin>>n>>k>>x; for(int i=1;i<=n;i++){ cin>>a[i]; if(a[i]>x){ if(k>a[i]/x){ k-=a[i]/x; a[i]=a[i]%x; } else{ a[i]=a[i]-k*x; k=0; } } } sort(a+1,a+n+1); for(int i=n;i>=1 && k;i--){ a[i]=0; k--; } long long ans=0; for(int i=1;i<=n;i++){ ans=ans+a[i]; } cout<<ans; return 0; } -
0
#include<bits/stdc++.h> using namespace std; const int N=2e5+10;// 这 #define int long long//别把 俩 位置搞反了,后果很严重(会RE) int a[N]; signed main() { memset(a,0,sizeof a); int n,k,x,cnt=0,ans=0;cin>>n>>k>>x; for(int i=1;i<=n;i++) { cin>>a[i]; cnt+=a[i]/x,ans+=a[i]; a[i]=-a[i]%x; } if(cnt>=k)return cout<<ans-k*x,0; sort(a+1,a+n+1); ans-=cnt*x; cnt=k-cnt; for(int i=1;i<=min(n,cnt);i++)ans+=a[i];//一定要加加min(n,cnt)要不然会RE cout<<ans; }
- 1
信息
- ID
- 12444
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 7
- 标签
- 递交数
- 47
- 已通过
- 11
- 上传者