結果
問題 | No.2671 NUPC Decompressor |
ユーザー |
|
提出日時 | 2024-03-15 21:30:04 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 4,180 bytes |
コンパイル時間 | 2,266 ms |
コンパイル使用メモリ | 178,656 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-09-30 00:25:05 |
合計ジャッジ時間 | 3,208 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 13 |
ソースコード
#include <bits/stdc++.h>#include <unordered_map>#include <stdlib.h>using namespace std;#define rep(i, a, n) for(ll i = a; i < n; i++)#define rrep(i, a, n) for(ll i = a; i >= n; i--)#define ll long long#define pii pair<int, int>#define pll pair<ll, ll>//constexpr ll MOD = 1000000007;constexpr ll MOD = 998244353;constexpr int IINF = 1001001001;constexpr ll INF = 1LL<<60;template<class t,class u> void chmax(t&a,u b){if(a<b)a=b;}template<class t,class u> void chmin(t&a,u b){if(b<a)a=b;}template <ll MOD> class modint {ll val;static vector<modint<MOD>> factorial_vec;public:ll get() const { return (ll)val; }// コンストラクタmodint(ll x = 0){val = x % MOD;if(val < 0) x += MOD;}// 入出力ストリームfriend constexpr istream &operator>>(istream &is, modint<MOD> &x){ll y; is >> y;x = y;return is;}friend constexpr ostream &operator<<(ostream &os, const modint<MOD> &x){return os << x.val;}// 算術演算子modint<MOD> operator -(){return modint<MOD>(-val);}modint<MOD> operator +(const modint<MOD> &r) const { return modint<MOD>(*this) += r; }modint<MOD> operator -(const modint<MOD> &r) const { return modint<MOD>(*this) -= r; }modint<MOD> operator *(const modint<MOD> &r) const { return modint<MOD>(*this) *= r; }modint<MOD> operator /(const modint<MOD> &r) const { return modint<MOD>(*this) /= r; }// 代入演算子modint<MOD> &operator +=(const modint<MOD> &r){val += r.val;if(val >= MOD) val -= MOD;return *this;}modint<MOD> &operator -=(const modint<MOD> &r){if(val < r.val) val += MOD;val -= r.val;return *this;}modint<MOD> &operator *=(const modint<MOD> &r){val = val*r.val%MOD;if(val < 0) val += MOD;return *this;}modint<MOD> &operator /=(const modint<MOD> &r){*this *= inv(r);return *this;}//等価比較演算子bool operator ==(const modint<MOD>& r){return this -> val == r.val;}bool operator !=(const modint<MOD>& r){return this -> val != r.val;}bool operator <(const modint<MOD>& r){return this -> val < r.val;}bool operator <=(const modint<MOD>& r){return this -> val <= r.val;}bool operator >(const modint<MOD>& r){return this -> val > r.val;}bool operator >=(const modint<MOD>& r){return this -> val >= r.val;}// 累乗static modint<MOD> modpow(modint<MOD> num, ll exp){if(!exp) return modint<MOD>(1); // 0乗modint<MOD> ret(1);modint<MOD> tmp = num;while(exp){if(exp&1) ret *= tmp;tmp *= tmp;exp >>= 1;}return ret;}// 逆元static modint<MOD> inv(modint<MOD> num){return modpow(num, MOD-2);}// 階乗static modint<MOD> factorial(ll n){modint<MOD> ret(1);if(n == 0) return ret;if((ll)factorial_vec.size() >= n) return factorial_vec[n-1];ret = factorial(n-1)*n;factorial_vec.push_back(ret);return ret;}// コンビネーションstatic modint<MOD> combination(ll n, ll r){return factorial(n) / factorial(r) / factorial(n-r);}};using mint = modint<MOD>;template <ll MOD> vector<modint<MOD>> modint<MOD>::factorial_vec;ll gcd(ll a, ll b){if(a%b == 0){return b;}else{return gcd(b, a%b);}}ll lcm(ll a, ll b){return a*b / gcd(a, b);}ll powMod(ll x, ll n) {if (n == 0) return 1 % MOD;ll val = powMod(x, n / 2);val *= val;val %= MOD;if (n % 2 == 1) val *= x;return val % MOD;}int main() {ll k;cin>>k;vector<string>s;rep(x,0,16){ll _=x;ll a=_%2;_/=2;ll b=_%2;_/=2;ll c=_%2;_/=2;ll d=_%2;string t="";t+="N";if(a)t=t+t;t+="U";if(b)t=t+t;t+="P";if(c)t=t+t;t+="C";if(d)t=t+t;s.push_back(t);}sort(s.begin(),s.end());cout<<s[k-1]<<endl;return 0;}