結果

問題 No.362 門松ナンバー
ユーザー vjudge1vjudge1
提出日時 2024-08-21 23:36:08
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 2 ms / 3,000 ms
コード長 1,850 bytes
コンパイル時間 2,227 ms
コンパイル使用メモリ 203,364 KB
実行使用メモリ 6,944 KB
最終ジャッジ日時 2024-08-21 23:36:11
合計ジャッジ時間 3,392 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
6,812 KB
testcase_01 AC 2 ms
6,944 KB
testcase_02 AC 2 ms
6,944 KB
testcase_03 AC 2 ms
6,940 KB
testcase_04 AC 2 ms
6,940 KB
testcase_05 AC 2 ms
6,940 KB
testcase_06 AC 2 ms
6,944 KB
testcase_07 AC 2 ms
6,940 KB
testcase_08 AC 1 ms
6,940 KB
testcase_09 AC 2 ms
6,944 KB
testcase_10 AC 2 ms
6,940 KB
testcase_11 AC 2 ms
6,940 KB
testcase_12 AC 2 ms
6,944 KB
testcase_13 AC 2 ms
6,944 KB
testcase_14 AC 2 ms
6,940 KB
testcase_15 AC 2 ms
6,944 KB
testcase_16 AC 2 ms
6,944 KB
testcase_17 AC 2 ms
6,940 KB
testcase_18 AC 2 ms
6,940 KB
testcase_19 AC 1 ms
6,940 KB
testcase_20 AC 2 ms
6,940 KB
testcase_21 AC 2 ms
6,944 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<bits/stdc++.h>
#define Add(x,y) (x+y>=mod)?(x+y-mod):(x+y)
#define lowbit(x) x&(-x)
#define pi pair<ll,ll>
#define pii pair<ll,pair<ll,ll>>
#define iip pair<pair<ll,ll>,ll>
#define ppii pair<pair<ll,ll>,pair<ll,ll>>
#define fi first
#define se second
#define full(l,r,x) for(auto it=l;it!=r;it++) (*it)=x
#define Full(a) memset(a,0,sizeof(a))
#define open(s1,s2) freopen(s1,"r",stdin),freopen(s2,"w",stdout);
#define For(i,l,r) for(int i=l;i<=r;i++)
#define _For(i,l,r) for(int i=r;i>=l;i--)
using namespace std;
typedef double db;
typedef unsigned long long ull;
typedef long long ll;
bool Begin;
const ll M=20;
inline ll read(){
    ll x=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9'){
        if(c=='-')
          f=-1;
        c=getchar();
    }
    while(c>='0'&&c<='9'){
        x=(x<<1)+(x<<3)+(c^48);
        c=getchar();
    }
    return x*f;
}
inline void write(ll x){
	if(x<0){
		putchar('-');
		x=-x;
	}
	if(x>9)
	  write(x/10);
	putchar(x%10+'0');
}
ll T,n,x,s,cnt;
ll dp[M][M][M],ans[M];
bool check(ll a,ll b,ll c){
	return ((a<b&&b>c&&a!=c)||(a>b&&b<c&&a!=c));
}
void init(){
	For(i,0,9)
	  For(j,0,9)
		if(i!=j)
		  dp[2][i][j]=1;
	For(l,3,14)
	  For(i,0,9)
	    For(j,0,9)
		  For(k,0,9)
		    if(check(i,j,k))
			  dp[l][i][j]+=dp[l-1][j][k];
}
void solve(){
	s=cnt=0;
	x=read();
	For(l,3,14){
	    For(j,1,9){
			For(k,0,9){
				if(s+dp[l][j][k]>=x){
					ans[l-1]=j,ans[l-2]=k;
					cnt=l;
					l=j=k=15;
				}
				else
				  s+=dp[l][j][k];
			}
		}
	}
	_For(l,2,cnt-1){
		ll j=ans[l],k=ans[l-1];
		For(i,0,9){
			if(check(j,k,i)){
				if(s+dp[l][k][i]>=x){
					ans[l-2]=i;
					break;
				}
				else
				  s+=dp[l][k][i];
			}
		}
	}
	_For(i,0,cnt-1)
	  write(ans[i]);
	putchar('\n');
}
bool End;
int main(){
	init();
	T=read();
	while(T--)
	  solve();
	//cerr<<'\n'<<abs(&Begin-&End)/1048576<<"MB";
	return 0;
}
0