题目:A 春
链接:A-春_牛客练习赛132
思路:只需要把最短的两条分别放在最两端即可。最短的两条只需要计算一次(所有的等腰梯形的上底和下底全部算上,这两条只需要加一次),其他的都需要加上两次。
代码:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
#define ll long long
int main()
{int n;cin>>n;vector<int> a(n);for(int i=0;i<n;i++){cin>>a[i];}sort(a.begin(),a.end());if(n>1){swap(a[1],a.back());//两个最小值放一前一后}ll ans=0;for(int i=0;i<n-1;i++){ans+=a[i]+a[i+1];}if(ans&1) cout<<ans/2<<".50";//奇数else cout<<ans/2<<".00";return 0;
}
题目:B 江
链接:B-江_牛客练习赛132
思路:排序去重后,使用双指针算法,尽可能使用上鬼牌,所有区间的最大值就是答案
代码:
#include <bits/stdc++.h>
#define maxn 500005
using namespace std;int n, m, k;
int a[maxn];int main()
{ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);cin >> n >> m >> k;vector<int> v;for(int i = 1; i <= n; i++) {int x;cin >> x;v.push_back(x);}sort(v.begin(), v.end());v.erase(unique(v.begin(), v.end()), v.end());// 去除vector v中的重复元素n = v.size();//更新元素个数int ans = 0;for(int l = 0, r = 0; l < v.size(); l++){while(r + 1 < v.size() &&// 尝试扩展右边界r,直到不能满足条件为止v[r + 1] - v[l] + 1 - (r - l + 2) <= k) r++;//(区间长度 - 不同元素数量) <= k//[l, r+1]内最多可以有的重复元素数量ans = max(ans, k + r - l + 1);}cout << min(ans, m);return 0;
}
题目:C 水
链接:C-水_牛客练习赛132
思路:将所有情况减去不是美丽图的情况(不能平分)即为答案
代码:
#include<bits/stdc++.h>
using namespace std;#define pb emplace_back
#define mp make_pairusing ll = long long;
using pii = pair<int,int>;constexpr int mod = 1e9 + 7;
constexpr int inf = 0x3f3f3f3f;
constexpr int N = 1e7 + 10;ll pow_mod(ll x, int p){ll s = 1;while(p){if(p & 1) s = s * x % mod;x = x * x % mod;p >>= 1;}return s;
}
ll fac[N];////阶乘数组
ll rev[N];//逆元数组
ll C(int n, int m){// 计算组合数 C(n, m) % modif(n < m) return 0;return fac[n] * rev[m] % mod * rev[n-m] % mod;
}void _main(){// 初始化阶乘数组fac[0] = 1;for(int i=1; i<N; ++i) fac[i] = fac[i-1] * i % mod;// 初始化逆元数组rev[N-1] = pow_mod(fac[N-1], mod - 2);//计算最大阶乘的逆元for(int i=N-1; i>0; --i) rev[i-1] = rev[i] * i % mod;int T, n, k;cin >> T;while(T--){cin >> n >> k;if(n & 1){cout << "0\n";} else {ll ans = C(n, k) - C(n / 2, k) * pow_mod(2, k) % mod;if(ans < 0) ans += mod;cout << ans << '\n';}}
}int main(){ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);_main();return 0;
}