今日练习
UVA11729 之前未完成,已AC;
UVA11300 错,已AC,待补充(
UVA11729
//
// Created by 21122 on 2022/5/11/0011.
//
#include<iostream>
#include<algorithm>
#include<vector>
#include<numeric>
using namespace std;
int main()
{
int n;
int index = 1;
int Case = 1;
while(true)
{
std::cin >> n;
if(n == 0)
{
break;
}
//cout << "n is:" << n << endl;
vector<vector<int>> v;
int B, J;
for(int i = 0; i < n; i++)
{
std::cin >> B >> J; // B 是交代任务的时间、 J是执行任务的时间
v.push_back(vector<int>{J, B});
// vector<int> temp;
// temp.push_back(B);
// temp.push_back(J);
// v.push_back(temp);
}
std::sort(v.begin(), v.end(), greater<vector<int>>());
vector<vector<int>>::iterator iter;
// for(iter = v.begin(); iter != v.end(); iter++)
// { //循环遍历(迭代法
// for(int i = 0; i < v[0].size(); i ++)
// { //或 i < (*iter).size()
// cout << (*iter)[i];
// }
// cout << endl;
// }
//
// for(int i = 0; i < v.size(); i++)
// { //下标遍历
// for(int j = 0; j < v[0].size(); j++)
// {
// cout<<v[i][j] << " ";
// }
// cout << endl;
// }
int total_time = 0;
//int work_time = 0;
int temp = 0;
for(int i = 0; i < v.size(); i++)
{
temp += v[i][1];
total_time = max(total_time, temp + v[i][0]);
// int time_of_doing = v[i][0];
// int time_of_telling = v[i][1];
//
// //work_time += time_of_doing - temp ? work_time > 0 : 0;
// //if(temp >= )
//
// //(*iter)[1] = ((time_of_doing - temp) <= 0)? 0 : (*iter)[1] - temp;
//
// total_time += time_of_telling;
//
// for(int j = 0; j <= i; j ++)
// { //对执行任务的时间进行处理
// //int sum = std::accumulate(i + 1, v.size(), 0);
//
// int sum = 0;
// for(int t = j + 1; t < v.size(); t ++)
// {
// sum += v[t][0];
// }
// //cout <<"sum is:" << sum << endl;
// v[j][0] -= sum;
// if (v[j][0] <= 0)
// {
// v[j][0] = 0;
// }
//temp = time_of_telling;
}
cout << "Case " << Case++ << ": "<< total_time << endl;
// int adding = 0;
// for(iter = v.begin(); iter != v.end(); iter++)
// {
//// for(int i = 0; i < v[0].size(); i ++)
//// { //或 i < (*iter).size()
//// cout << (*iter)[i];
//// }
//// cout << endl;
// adding = max(0, (*iter)[0]);
// }
//int adding = max_element([1, 2, 3, 4, 5]);
//cout << "total_time is:" << total_time + adding<< endl;
//std::cout <<"Case " << index <<": " << total_time + adding << endl;
//index += 1;
// for(int i = 0; i < v.size(); i++)
// { //下标遍历
// for(int j = 0; j < v[0].size(); j++)
// {
// cout<<v[i][j] << " ";
// }
// cout << endl;
// }
}
return 0;
}
UVA 11300
#include<iostream>
#include<algorithm>
#include <numeric>
#include<cstdio>
using namespace std;
const int maxn = 1000005;
long long arr[maxn];
long long temp[maxn];
int main()
{
int n;
while(std::cin >> n) // != EOF// ?无法通过测试
//while(scanf("%d", &n) != EOF)
{
//std::cout << "n is:" << endl;
long long sum = 0;
for(int i = 1; i <= n; i++)
{ //数据导入
cin >> arr[i];
sum += arr[i];
}
//long long avg = accumulate(arr + 0, arr + n, 0) / n;
long long avg = sum / n;
//std::cout << "avg is:" << avg << endl;
//std::sort(arr, arr + n,greater<int>()); 排序后会将原有顺序打乱,与题目中 “相邻交换” 的条件冲突
temp[0] = 0;
for(int i = 1;i < n; i++)
{
temp[i] = temp[i - 1] + arr[i] - avg;
}
std::sort(temp, temp + n); //对 temp 数组排序,方便寻找中位数
long long median = temp[n / 2];
long long total_number = 0;
for(int i = 0; i < n; i++)
{
total_number += std::abs(median - temp[i]); //可能存在负数,例如:A 给 B 2个,则为 B 给 A -2 个,故使用 abs
}
cout << total_number << endl;
// for(auto val : arr)
// {
// cout << val << endl;
// }
// int median;
// if(n % 2 == 0) //n 为偶数,取中间2个数的平均值
// {
// median = (arr[n / 2] + arr[n / 2 - 1]) / 2;
// }
// else //n 为奇数,取中间那个数
// {
// median = arr[n / 2];
// }
//
// if(median == avg)
// {
// cout << 0 << endl;
// }
// else
// {
// cout << median << endl;
// }
}
return 0;
}
总结
UVA11300 主要设计数学推理问题,Y同学该复习数学了阿!: (