2012年每周一赛第四场第九题。看起来好像很高级的样子,其实嘛,就是暴力和精度问题。运气够好的话马上就可以AC了;运气不好的话,那就悲剧了……
Run Time: 0sec
Run Memory: 312KB
Code Length: 1594Bytes
Submit Time: 2012-04-0122:12:26
// Problem#: 4960
// Submission#: 1300117
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
#include <iostream>
#include <stack>
#include <string>
#include <cmath>
using namespace std;
int main()
{
stack<double> sd;
string s;
int num, i;
double t1, t2;
while( cin >> num && num ) {
while( !sd.empty() )
sd.pop();
for( i = 0; i < num; i++ ) {
cin >> s;
if( s == "x" )
sd.push( 2 );
else if( s == "sin" ) {
t1 = sd.top();
sd.pop();
sd.push( sin( t1 ) );
}
else if( s == "cos" ) {
t1 = sd.top();
sd.pop();
sd.push( cos( t1 ) );
}
else if( s == "tan" ) {
t1 = sd.top();
sd.pop();
sd.push( tan( t1 ) );
}
else if( s == "+" ) {
t1 = sd.top();
sd.pop();
t2 = sd.top();
sd.pop();
sd.push( t1 + t2 );
}
else if( s == "-" ) {
t1 = sd.top();
sd.pop();
t2 = sd.top();
sd.pop();
sd.push( t2 - t1 );
}
else if( s== "*" ) {
t1 = sd.top();
sd.pop();
t2 = sd.top();
sd.pop();
sd.push( t1 * t2 );
}
}
if( fabs( sd.top() ) < 0.000000001 )
cout << "Identity" << endl;
else
cout << "Not an identity" << endl;
}
return 0;
}