求大佬解答,俺爆零,呜呜呜呜,有待更新。。。
小红的数组拆分
题目描述
把长度为n的数组,拆分成k个非空子序列,使得k个子序列的平均数之和尽可能的小
输入描述
第一行输入两个正整数n和k,代表数组的长度,子序列的数量。
第二行输入n个正整数,代表数组的元素
输出描述
一个小数,代表最终平均数之和的最小值,如果你的答案和正确答案误差不超过,则认为答案是正确的。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
template<class T>
void print(vector<T> &arr) {
for(auto e : arr) cout << e << " ";
cout << endl;
}
int main() {
freopen("in1.txt", "r", stdin);
int n, k;
cin >> n >> k;
// cout << n << k;
vector<int> arr(n);
for(auto &e : arr) cin >> e;
// print(arr);
sort(arr.begin(), arr.end());
// print(arr);
double ans = 0;
long long sum = accumulate(arr.begin(), arr.end(), 0LL);
// cout << sum << endl;
for(int i = 0; i < k - 1; i++) {
ans += arr[i];
sum -= arr[i];
// cout << sum << endl;
}
ans += (double) sum / (n - k + 1);
// cout << ans << endl;
printf("%.11llf\n", ans);
return 0;
}
/*
4 3
-1 2 -1 3
0.50000000000
*/
小红的区间排列
题目描述
输入描述
有多组数据,首先输入一个正整数T,表示有T组数据,每组的第一行输入一个正整数n,代表排列的大小,每组数据的第二行输入n个正整数,代表小红拿到的排列。
,对于90%的数据T=1
保证所有数据n的总和不超过
输出描述
输出一个整数,代表多少区间能构成一个排列。
示例
输入
2
5
1 2 3 4 5
5
2 1 5 3 4
输出
5
3
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
template<class T>
void print(vector<T>& arr) {
for (auto e : arr) cout << e << " ";
cout << endl;
}
int main() {
int t;
cin >> t;
while(t--){
int n;
cin >> n;
vector<int> arr(n);
for(auto &e : arr) cin >> e;
}
return 0;
}
/*
*/
小红走矩阵
题目描述
输入描述
有T组测试用例,第一行输入一个正整数T,表示用例个数。
接下来T行,每行两个正整数n和m,表示矩阵的大小。
输出描述
输出T行,每行一个整数,表示该组用例的答案。
答案可能很大,请对取模后再输出。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int mod = 1e9 + 7;
template<class T>
void print1(vector<T>& arr) {
for (auto e : arr) cout << e << " ";
cout << endl;
}
template<class T>
void print2(vector<vector<T>>& arr) {
for (auto e : arr) print1(e);
cout << endl;
}
int main() {
int t, m, n;
cin >> t;
while(t--){
cin >> n >> m;
vector<vector<int>> dp(n + 1, vector<int>(m + 1));
dp[1][1] = 1;
for(int i = 2; i <= n; i++) {
for(int ii = 1; i - ii > 0; ii+=2){
dp[i][1] += dp[i -ii][1];
dp[i][1] %= mod;
}
}
// print2(dp);
for(int j = 2; j <= m; j++){
for(int jj = 1; j - jj > 0; jj += 2){
dp[1][j] += dp[1][j - jj];
dp[1][j] %= mod;
}
}
// print2(dp);
for(int i = 2; i <= n; i++) {
for(int j = 2; j <= m; j++) {
for(int ii = 1; i - ii > 0; ii += 2) {
dp[i][j] += dp[i - ii][j] ;
dp[i][j] %= mod;
}
for(int jj = 1; j - jj > 0; jj += 2){
dp[i][j] += dp[i][j - jj];
dp[i][j] %= mod;
}
}
}
cout << dp[n][m] << endl;
}
return 0;
}
/*
example 1
1
2 4
6
example 2
2
5 4
3 6
66
54
*/