結果
| 問題 |
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;
}