알고리즘
백준 11332번 시간초과 C++
영춘권의달인
2023. 2. 28. 13:10
https://www.acmicpc.net/problem/11332
11332번: 시간초과
각 테스트 케이스들에 대하여 시간 초과가 나면 "TLE!", 시간 초과가 나지 않으면 "May Pass." 를 출력한다.
www.acmicpc.net
범위를 넘어가는 수는 미리 차단해서 오버플로우를 방지한다.
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <list>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>
#include <limits.h>
using namespace std;
using int64 = long long;
int c;
const int TLENUM = 1000000001;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> c;
while (c--) {
string str;
cin >> str;
int n, t, l;
cin >> n >> t >> l;
string com = "";
bool start = false;
for (int i = 0; i < str.length(); i++) {
if (start == false) {
if (str[i] == '(') start = true;
}
else {
if (str[i] == ')') break;
com += str[i];
}
}
int64 maxVal = 1;
int64 time = 100000000 * l;
bool pass = true;
if (com == "N") {
maxVal = n;
}
else if (com == "N^2") {
if (n >= 31263) pass = false;
maxVal = pow(n, 2);
}
else if (com == "N^3") {
if (n >= 1001) pass = false;
maxVal = pow(n, 3);
}
else if (com == "2^N") {
if (n >= 30) pass = false;
else maxVal = pow(2, n);
}
else if (com == "N!") {
if (n >= 13) pass = false;
else {
for (int i = 1; i <= n; i++) {
maxVal *= i;
}
}
}
maxVal *= t;
if (pass) {
if (maxVal > time) pass = false;
}
if (pass) cout << "May Pass.\n";
else cout << "TLE!\n";
}
}