URL:http://codeforces.com/problemset/problem/1202/D
質問の意味:
$ $ Aは、n入力、出力のみ$ 1,3,7- $文字列を含む文字列は、配列$ 1E5 $を超えない$ $ $ 1337 $ N-長さを有しています。
ソリューション:
まず、我々は知っている$ C_ {2} ^ {N} = \ FRAC {N(N-1)} {2} $が$を満たす場合にはn = \ FRAC {X(X-1)} {2} $ $ 133 $ 3337 .....出力する($のX $ $ $ 3を含みます)。これは明らかです。その後、それが満たされていない場合。このレースは、後ろのアップクリアしたいときは本当に私が考えることはできません。まず、彼らはもはや{2} {X(X-1)} {X(X-1)}、{2} $、我々は最近から発見したと未満$ $ $ N-N- $ A $ \ FRAC $ N = \のFRACを満たしていないため、 A $ $ $ REM 7を含む$計算$ REM = N- \ FRAC {X(X-1)} {2} $、$ 13377、建設列...... ..... 7733 $ 337( $と$ K $ $ 3 $)。それは計算すべきか$ K $?次いで配列と$レム$サブシーケンスを含む正面構成、バック含有$ C_ {K} ^ {2} $ 3 $を示す正面および背面における$は$ 2 \ CDOTのk個の$ Aであり、その後、上記$ 133組み合わせ$、最終$ 7 $、$から$ 1、$のでN = N- FRAC \ {X(X-1)} {2} + C_ {K} ^ {2} +2 \ CDOT K + 1 $、 $ Nので、知られている、計算さ$ kは$ $をxは。
ACコード:
#include <ビット/ STDC ++ H> 名前空間STDを使用して、 長い長いNUM [100005]。 INITを無効() { ため(長い長i = 1; iが100005を<; ++ i)は NUM [I] = iは(I-1)/ 2 *; } int型のmain() { INIT()。 int型T; scanf関数( "%のD"、&T)。 (T--)一方 { INT N。 scanf関数( "%のD"、&N); int型のPOS。 用(POS = 1; NUM [POS] <= N; ++ POS)。 POS-= 1。 IF(N-NUM [POS]) { COUT << "133"。 (I 0 = int型、iがN-NUM [POSを<; ++ i)のため COUT << '7'。 I = 0をint型(ため。 coutの<< '3'。 coutの<< '7'。 coutの<<てendl; } 他 { COUT << '1'。 (I 0 = int型、私は、POSを<; ++ i)のため COUT << '3'; coutの<< '7'。 coutの<<てendl; } } 0を返します。 }