题目大意: 有n件物品,第i件物品的价格为i,现从中选两件使得总价为k(位置互换只算一种,每种物品只能选择一次)
简单的数学问题,分情况考虑即可。
cnt=k-n 如果cnt>n,那么显然无法得到一组解(即k过于大)
如果k<=n,那么简单的凑起来就可以了
(1,k-1),(2,k-2)……
还剩一种情况,k>n&&cnt<=n,那么就将大于cnt的拼凑起来即可,与k<=n的情况类似。
注意用 long long
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
typedef long long ll;
int main(){
ll n,k;
cin>>n>>k;
ll cnt=k-n;
if(cnt>=n)cout<<0;
else if(n>=k)cout<<(k-1)/2;
else cout<<(n-cnt+1)/2;
return 0;
}
本文介绍了一种简单有效的算法来解决总价组合问题:给定n件不同价格的物品,找出所有可能的两种物品组合,使其总价等于给定值k。通过分情况讨论,解决了不同条件下的组合数量计算。
508

被折叠的 条评论
为什么被折叠?



