Problem p02554 (C++) — buggy submission, verdict: Time Limit Exceeded

// Author: Vinay Khilwani
// Language: C++

// @vok8: Codeforces, AtCoder, LeetCode, HackerEarth, TopCoder, Google, FB,
// CSES, Spoj, GitHub
// @vok_8: CodeChef, GFG
// @vok8_khilwani: HackerRank

// Never Stop Trying.
// Trying to be Better than Myself.

// while(true)
// {
//     if(AC)
//     {
//         break;
//     }
//     else if(Contest Over)
//     {
//         Try.
//         Check out Editorial.
//         Understand.
//         Find out your Mistake.
//         Learn the topic (if new).
//         Solve Problems on that topic (if new).
//         Upsolve that problem.
//         break;
//     }
//     else
//     {
//         Try.
//         Use Pen-Paper.
//         Find errors, edge cases, etc.
//         continue;
//     }
// }

// Optimizations
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx2")
#pragma GCC optimize("Os")

// Libraries
#include <bits/stdc++.h>
using namespace std;
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>
// using namespace __gnu_pbds;

// Debugging
#define dbg(a) cerr << a << "\\n";
#define debug_a(a)                                                             \\
  for (auto x : a) {                                                           \\
    cerr << x << " ";                                                          \\
  }                                                                            \\
  cerr << "\\n";
#define debug_b(a)                                                             \\
  for (auto x : a) {                                                           \\
    cerr << "[" << x.first << ", " << x.second << "]"                          \\
         << "\\n";                                                              \\
  }                                                                            \\
  cerr << "\\n";
#define debug_c(a)                                                             \\
  for (auto x : a) {                                                           \\
    debug_a(x)                                                                 \\
  }                                                                            \\
  cerr << "\\n";
#define debug_d(a)                                                             \\
  for (auto x : a) {                                                           \\
    debug_b(x)                                                                 \\
  }                                                                            \\
  cerr << "\\n";
#define debug_e(a)                                                             \\
  cerr << "[" << a.first << ", " << a.second << "]"                            \\
       << "\\n";

// Defines
#define fast                                                                   \\
  ios_base::sync_with_stdio(false);                                            \\
  cout.tie(NULL);                                                              \\
  cin.tie(NULL);
#define loop(i, a, n) for (int i = a; i < n; i++)
#define rloop(i, a, n) for (int i = a; i >= n; i--)
#define fr(i, a, n, b) for (int i = a; i < n; i += b)
#define rfr(i, a, n, b) for (int i = a; i >= n; i -= b)
#define IN cin >>
#define OUT cout <<
#define nl "\\n"
#define sz(a) int(a.size())
#define all(a) (a).begin(), (a).end()
#define each(a, b) for (auto &a : b)
#define pb push_back
#define set_bits(a) __builtin_popcountll(a)
#define ar array
#define write(a)                                                               \\
  for (auto x : a) {                                                           \\
    OUT x << " ";                                                              \\
  }                                                                            \\
  OUT nl;
#define read(a)                                                                \\
  for (auto &x : a) {                                                          \\
    IN x;                                                                      \\
  }
// #define oset
// tree<int,null_type,less<int>,rb_tree_tag,tree_order_statisticnts_node_update>
using ll = long long int;
using ld = long double;
using pll = pair<ll, ll>;
using pii = pair<int, int>;
using vll = vector<ll>;
using vi = vector<int>;
const ll mod = (ll)(1e9) + 7LL;
const ll M = 998244353LL;
const int dx[4] = {1, 0, -1, 0};
const int dy[4] = {0, 1, 0, -1};
const ld pi = acos(-1);

// General Functions
ll gcd(ll a, ll b) { return (b ? gcd(b, a % b) : a); }
ll P(ll B, ll power, ll modulo) // Fast Power
{
  ll ans = 1LL;
  while (power > 0LL) {
    if (power % 2LL == 1LL) {
      ans = (ans * B) % modulo;
    }
    B = (B * B) % modulo;
    power /= 2LL;
  }
  return ans;
}
bool isPrime(ll n) {
  if (n <= 1LL) {
    return false;
  }
  if (n <= 3LL) {
    return true;
  }
  if (n % 2 == 0LL || n % 3 == 0LL) {
    return false;
  }
  for (ll i = 5LL; (i * i) <= n; i += 6LL) {
    if (n % i == 0LL || n % (i + 2LL) == 0LL) {
      return false;
    }
  }
  return true;
}
void vok() {
  fast
#ifndef ONLINE_JUDGE
      freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
  freopen("error.txt", "w", stderr);
#endif
}

// Global Variables
const int mxN = int(1e6) + 10;
vll fact(mxN), ifact(mxN);
ll pow2[mxN], pow8[mxN];

// Solver Function(s)
ll ncr(ll n, ll r) {
  ll ret = fact[n];
  ret *= P(fact[r], mod - 2, mod);
  ret %= mod;
  ret *= P(fact[n - r], mod - 2, mod);
  ret %= mod;
  return ret;
}
void solve() {
  ll n;
  IN n;
  ll ans = 0;
  pow2[0] = pow8[0] = 1;
  loop(i, 1, n + 2) {
    pow2[i] = pow2[i - 1] * 2 % mod;
    pow8[i] = pow8[i - 1] * 8 % mod;
  }
  loop(i, 2, n + 1) {
    ll add = ncr(n, i);
    add *= pow8[n - i];
    add %= mod;
    add *= (pow2[i] - 2);
    if (add < 0) {
      add += mod;
    }
    add %= mod;
    ans += add;
    ans %= mod;
  }
  OUT ans << nl;
}

// Main Function
int main() {
  vok();
  fact[0] = 1;
  loop(i, 1, mxN) { fact[i] = fact[i - 1] * (ll)(i) % mod; }
  loop(i, 0, mxN) { ifact[i] = P(fact[i], mod - 2, mod); }
  int t = 1;
  // IN t;
  while (t--) {
    solve();
  }
  return 0;
}

Error: TLE

Fixed submission:

// Author: Vinay Khilwani
// Language: C++

// @vok8: Codeforces, AtCoder, LeetCode, HackerEarth, TopCoder, Google, FB,
// CSES, Spoj, GitHub
// @vok_8: CodeChef, GFG
// @vok8_khilwani: HackerRank

// Never Stop Trying.
// Trying to be Better than Myself.

// while(true)
// {
//     if(AC)
//     {
//         break;
//     }
//     else if(Contest Over)
//     {
//         Try.
//         Check out Editorial.
//         Understand.
//         Find out your Mistake.
//         Learn the topic (if new).
//         Solve Problems on that topic (if new).
//         Upsolve that problem.
//         break;
//     }
//     else
//     {
//         Try.
//         Use Pen-Paper.
//         Find errors, edge cases, etc.
//         continue;
//     }
// }

// Optimizations
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx2")
#pragma GCC optimize("Os")

// Libraries
#include <bits/stdc++.h>
using namespace std;
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>
// using namespace __gnu_pbds;

// Debugging
#define dbg(a) cerr << a << "\\n";
#define debug_a(a)                                                             \\
  for (auto x : a) {                                                           \\
    cerr << x << " ";                                                          \\
  }                                                                            \\
  cerr << "\\n";
#define debug_b(a)                                                             \\
  for (auto x : a) {                                                           \\
    cerr << "[" << x.first << ", " << x.second << "]"                          \\
         << "\\n";                                                              \\
  }                                                                            \\
  cerr << "\\n";
#define debug_c(a)                                                             \\
  for (auto x : a) {                                                           \\
    debug_a(x)                                                                 \\
  }                                                                            \\
  cerr << "\\n";
#define debug_d(a)                                                             \\
  for (auto x : a) {                                                           \\
    debug_b(x)                                                                 \\
  }                                                                            \\
  cerr << "\\n";
#define debug_e(a)                                                             \\
  cerr << "[" << a.first << ", " << a.second << "]"                            \\
       << "\\n";

// Defines
#define fast                                                                   \\
  ios_base::sync_with_stdio(false);                                            \\
  cout.tie(NULL);                                                              \\
  cin.tie(NULL);
#define loop(i, a, n) for (int i = a; i < n; i++)
#define rloop(i, a, n) for (int i = a; i >= n; i--)
#define fr(i, a, n, b) for (int i = a; i < n; i += b)
#define rfr(i, a, n, b) for (int i = a; i >= n; i -= b)
#define IN cin >>
#define OUT cout <<
#define nl "\\n"
#define sz(a) int(a.size())
#define all(a) (a).begin(), (a).end()
#define each(a, b) for (auto &a : b)
#define pb push_back
#define set_bits(a) __builtin_popcountll(a)
#define ar array
#define write(a)                                                               \\
  for (auto x : a) {                                                           \\
    OUT x << " ";                                                              \\
  }                                                                            \\
  OUT nl;
#define read(a)                                                                \\
  for (auto &x : a) {                                                          \\
    IN x;                                                                      \\
  }
// #define oset
// tree<int,null_type,less<int>,rb_tree_tag,tree_order_statisticnts_node_update>
using ll = long long int;
using ld = long double;
using pll = pair<ll, ll>;
using pii = pair<int, int>;
using vll = vector<ll>;
using vi = vector<int>;
const ll mod = (ll)(1e9) + 7LL;
const ll M = 998244353LL;
const int dx[4] = {1, 0, -1, 0};
const int dy[4] = {0, 1, 0, -1};
const ld pi = acos(-1);

// General Functions
ll gcd(ll a, ll b) { return (b ? gcd(b, a % b) : a); }
ll P(ll B, ll power, ll modulo) // Fast Power
{
  ll ans = 1LL;
  while (power > 0LL) {
    if (power % 2LL == 1LL) {
      ans = (ans * B) % modulo;
    }
    B = (B * B) % modulo;
    power /= 2LL;
  }
  return ans;
}
bool isPrime(ll n) {
  if (n <= 1LL) {
    return false;
  }
  if (n <= 3LL) {
    return true;
  }
  if (n % 2 == 0LL || n % 3 == 0LL) {
    return false;
  }
  for (ll i = 5LL; (i * i) <= n; i += 6LL) {
    if (n % i == 0LL || n % (i + 2LL) == 0LL) {
      return false;
    }
  }
  return true;
}
void vok() {
  fast
#ifndef ONLINE_JUDGE
      freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
  freopen("error.txt", "w", stderr);
#endif
}

// Global Variables
const int mxN = int(1e6) + 100;
vll fact(mxN), ifact(mxN);

// Solver Function(s)
ll ncr(ll n, ll r) {
  ll ret = fact[n];
  ret *= P(fact[r], mod - 2, mod);
  ret %= mod;
  ret *= P(fact[n - r], mod - 2, mod);
  ret %= mod;
  return ret;
}
void solve() {
  ll n;
  IN n;
  ll val = 0;
  ll ans = 0;
  loop(i, 2, n + 1) {
    ll add = ncr(n, i);
    add *= P(8, n - i, mod);
    add %= mod;
    add *= ((P(2, i, mod) - 2 + mod) % mod);
    add %= mod;
    ans += add;
    ans %= mod;
  }
  // ans*=2;
  // ans%=mod;
  OUT ans << nl;
}

// Main Function
int main() {
  vok();
  fact[0] = 1;
  loop(i, 1, mxN) { fact[i] = fact[i - 1] * (ll)(i) % mod; }
  loop(i, 0, mxN) { ifact[i] = P(fact[i], mod - 2, mod); }
  int t = 1;
  // IN t;
  while (t--) {
    solve();
  }
  return 0;
}