3 条题解
-
0
#include <bits/stdc++.h> using namespace std;
int main() { long long n, r; cin >> n >> r; long long a[n], s[r]; for (long long i = 0; i < n; i++) { cin >> a[i]; } sort(a, a + n); for (long long i = 0; i < r; i++) { s[i] = a[i]; } for (long long i = r; i < n; i++) { s[i] = a[i] + s[i - r]; } long long sum = 0; for (long long i = 0; i < n; i++) { sum += s[i]; } cout << sum; return 0; }
-
0
#include<bits/stdc++.h> using namespace std; void maopao(int a[],int n) { bool ok; for(int i=n-1;i>=1;i--) { ok=true; for(int j=0;j<i;j++) { if(a[j]>a[j+1]) { swap(a[j],a[j+1]); ok=false; } } if(ok==true) break; } } int main() { int n; int r; int a[510]; int b[510]; cin>>n>>r; int sum=0; for(int i=0;i<n;i++) { cin>>a[i]; } maopao(a,n); for(int i = 0; i < r; i++) { b[i] = a[i]; } for(int i = r; i < n; i++) { b[i] = b[i - r] + a[i]; } for(int i = 0; i < n; i++) { sum += b[i]; } cout<<sum<<endl; }
-
-2
#include<iostream> using namespace std; //将打水时间从小到大排序 void maopao(int a[],int n){ bool ok; //进行N-1轮排序 for(int i=n-1;i>=1;i--){ ok=true;//假设没有交换 //每轮进行i次排序 for(int j=0;j<i;j++){ //大的数往下沉 if(a[j]>a[j+1]){ //相互交换 C++自带函数 swap(a[j],a[j+1]); ok=false;//一旦发生过交换,标志设置成false,说明需要下一轮 } } //如果此轮没有发生过交换,说明数组已经排序完成 //无需下一轮比较跳出循环 if(ok==true) break; } } int main(){ int n;//打水的人数 int r;//水龙头的个数 int a[510];//每个人的打水时间 int b[510];//每个人真正打水的时间= 打水时间+等待时间 cin>>n>>r; int sum=0;//所有人所用打水时间 //输入每个人的打水时间 for(int i=0;i<n;i++){ cin>>a[i]; } //对打水时间进行由小到大排序 maopao(a,n); //实体水龙头r个,前r个人无需等待,直接保存前r个人的打水时间 for(int i = 0; i < r; i++) { b[i] = a[i]; } //虚拟水龙头n-r个, 等于其等待时间,i - r 相当于从第1个水龙头顺序排下来 for(int i = r; i < n; i++) { b[i] = b[i - r] + a[i]; } //统计所有人打水时间 for(int i = 0; i < n; i++) { sum += b[i]; } cout<<sum<<endl; }
- 1
信息
- ID
- 228
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- 6
- 标签
- 递交数
- 170
- 已通过
- 49
- 上传者