UVa 537 Artificial Intelligence

📅 2026/6/19 22:27:54
UVa 537 Artificial Intelligence
题目描述题目要求从文本中提取两个物理量电压UUU、电流III、功率PPP的值并计算第三个未知量。公式为PU×IP U \times IPU×I。输入中包含可能的前缀m\texttt{m}m毫、k\texttt{k}k千、M\texttt{M}M兆。输出计算结果保留两位小数。输入格式第一行一个整数nnn表示测试用例的数量。每个测试用例一行文本包含恰好两个数据字段格式如P100W、U200V、I4.5A以及一些额外单词。输入保证等号只在数据字段中出现。输出格式对于每个测试用例输出Problem #k然后输出计算结果格式如P900.00W、I0.45A或U1250000.00V最后输出一个空行。样例输入3 If the voltage is U200V and the current is I4.5A, which power is generated? A light-bulb yields P100W and the voltage is U220V. Compute the current, please. bla bla bla lightning strike I2A bla bla bla P2.5MW bla bla voltage?输出Problem #1 P900.00W Problem #2 I0.45A Problem #3 U1250000.00V题目分析本题的核心是从文本中解析出数据字段并根据公式计算未知量。解析方法对于每个数据字段定位P、U或I然后提取等号后面的数字和单位。数字可能包含正负号、小数点。单位可能带有前缀m、k、M。将数值转换为标准单位即乘以相应前缀因子。计算若已知PPP和UUU则IP/UI P / UIP/U。若已知PPP和III则UP/IU P / IUP/I。若已知UUU和III则PU×IP U \times IPU×I。输出按指定格式输出保留两位小数。复杂度分析每个测试用例只需解析一行文本O(L)O(L)O(L)。代码实现// Artificial Intelligence?// UVa ID: 537// Verdict: Accepted// Submission Date: 2016-08-10// UVa Run Time: 0.000s//// 版权所有C2016邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;intmain(intargc,char*argv[]){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);string line;getline(cin,line);intnstoi(line);for(intcases1;casesn;cases){coutProblem #cases\n;vectorcharkeys{P,U,I};mapchar,doublevalues{{P,-1.0},{U,-1.0},{I,-1.0}};mapchar,doubleunits{{m,0.001},{k,1000.0},{M,1000000.0}};getline(cin,line);for(autokey:keys){string target;target.insert(target.begin(),key);intstartline.find(target);if(start!line.npos){string block;for(intistart;iline.length();i){if(!isblank(line[i]))blockline[i];elsebreak;}string number;for(inti2;iblock.length();i)if(isdigit(block[i])||block[i].||block[i]||block[i]-)numberblock[i];elsebreak;values[key]stod(number);for(autounit:units)if(block.find(unit.first)!block.npos){values[key]*unit.second;break;}}}if(values[P]0values[U]0)coutIfixedsetprecision(2)(values[P]/values[U])A\n\n;elseif(values[P]0values[I]0)coutUfixedsetprecision(2)(values[P]/values[I])V\n\n;elsecoutPfixedsetprecision(2)(values[U]*values[I])W\n\n;}return0;}