Sample Input
5 3 20 2
Red 90
Orange 110
5 3 20 2
ThisOne 110
TheOtherOne 100
5 3 20 1
TooLittle 90
5 5 20 1
Sample 10
Sample Output
100.00 Orange
100.00 TheOtherOne
impossible
“—”
#include<iostream>
#include<vector>
#include<cstring>
#include<iomanip>
#include<algorithm>
using namespace std;
class resistance {
public:
string name;
int r;
};
bool cmp(resistance one, resistance another) {
if (one.r < another.r) return true;
else return false;
}
int main() {
resistance arr[10000];
string str;
double result;
int tempr;
// totalvol位总电压,vol为电压,cur为电流
// 保证电路正常所需要接入的最小电阻
int totalvol, vol, cur, n;
while (cin >> totalvol >> vol >> cur >> n) {
bool flag = false;
if (totalvol <= 0) {
cout << "IMPOSSIBLE" << endl;
continue;
}
for (int i = 0; i < n; ++i) {
cin >> arr[i].name >> arr[i].r;
}
result = 1000.0 * (totalvol - vol) / cur; // 还能承载的最小电阻
if (result <= 0) {
cout << "---" << endl;
continue;
}
sort(arr, arr + n, cmp); // 重要,如果直接用冒泡排序的话很可能会超时,注意sort函数的使用,其中最后一个参数是回调函数,返回值是bool值
for (int i = 0; i < n; ++i) {
if (arr[i].r >= result) {
cout.setf(ios::fixed);
cout.precision(2);
cout << result << " " << arr[i].name << endl;
flag = false;
break;
}
}
if (flag) cout << "IMPOSSIBLE" << endl;
}
return 0;
}