トピックへのリンク:https://codeforc.es/contest/1202/problem/D
質問の意味:
あなたの数を与えるために、N(<= 1E9)、そのようのでストリング..... 137 713 713(のみ1,3,7-を含む)構成の異なるサブシーケンス1337の数は、N-ストリングから構成は、することができません長い(<= 1E5) 。
アイデア:
構成の問題のこのタイプは、私はしようとした最初の方法で固定されなければならない(図2a)C + C (2、B)+ C(C 2)+···= N 形、見つかりません。その後、まだ私は他の人のコードを読んで、
あるC(2、M)+ kは任意の二つのため、組成nの形でN *(N-1)と(N-1)*(N -2) 数(差より大きくない2 * 31622)ので、ルート1E9がある31622。
そう全長はより大きくない2 * 31622 +(最大長kである)31 622は、(最大長mである)正確に94868 <1E5。
そう答えは 133 + 7(K番目)+ 3333(二M-2)... 7
1つ の#define IOSはios_base :: sync_with_stdio(0)。cin.tie(0)。 2の#include <cstdioを> // のsprintf islowerはisupper 3の#include <cstdlib> // のmalloc出口STRCATのitoaはシステム( "CLS") 4の#include <入出力ストリーム> // 対 5の#include <fstreamの> 6の#include <ビット集合> 7 // の#include <地図> 8 // の#include <unordered_map> https://codeforc.es/contest/1202/problem/D 9の#include <ベクトル> 10の#include <積層> 11の#include < 設定 > する#include < 文字列・H> // はstrstr SUBSTR 13の#include < ストリング > 14の#include <TIME.H> // にsrand(((符号なし)時間(NULL)))。シードN =ランド()%10から0〜9。 15の#include <cmath> 16の#include <両端キュー> 17の#include <キュー> // PRIORITY_QUEUE <整数、ベクトル<整数>、大きな<整数>> Q。// 以下 18の#include <ベクトル> // emplace_back 19 // の#include <math.h>の 20 // の#include <WINDOWS.H> // (+ LEN)逆。// 〜!〜!床 21の#include <アルゴリズム> // ソート+ユニーク:SZ =一意(B + 1、B + N + 1) - (B + 1)+ nth_element(第一、第n、最後、比較) 22 使用 名前空間 STDを、// next_permutation(A + 1、A + 1個の+ N)。// prev_permutation 23 の#define(; <= C ++ A = B intを登録)するための(C、B)FO 24 の#define(= bのintを登録するためのFR(C、B)。 > = C; - A) 25 の#define MEM(A、B)のmemset(A、B、はsizeof(A)) 26回 の#define PRのprintf 27 の#define SCのscanf 28回 の#defineのLS RT << 1つの 29 の#define RSのRT << 1 | 1 30 ボイド swapp(INT&A、INT&B)。 31 ダブル fabss(ダブルA)。 32 int型 MAXX(int型、int型のB)。 33 INTミネソタ州(INT A、INT B)。 34 INT Del_bit_1(int型N); 35 INT lowbit(INT N)。 36の int型の ABS面(INT A)。 37 // CONST長い長いINF =(1LL << 60)。 38 constの ダブル E =2.718281828 ; 39 CONST ダブル PI = ACOS( - 1.0 )。 40 のconst int型 INF =(1 << 29 )。 41 CONST ダブル ESP = 1E- 9 。 42 CONST INT MOD =(INT)1E9 + 7 。 43 のconst int型 N =(INT)1E6 + 10 。 44 45 のint main()の 46 { 47 のint T。 48 SC(" %dの"& T); 49 ながら(T-- ) 50 { 51 のint nは、 52 SC(" %のD "、&N); // C(2 N)+ K; 53 int型のk = 0、M = 0 ; 54 のための(int型 I = N; I> = 1 ; - I) 55 { 56 、K = N- I; 57 int型 J =(INT)SQRT(2 * I); 58 長い ロングTEMP = J×(J + 1 )。 59 であれば(2 * I == TEMP) 60 { 61 、M = J + 1 。 62 ブレーク; 63 } 64 } 65 PR(" 133 " )。 66 FO(I、1 、K) 67 PR(" 7 " )。 68 FO(I、1、M- 2 ) 69 PR(「3" ); 70 PR(" 7 」); 71 COUT << ENDL; 72 } 73 リターン 0 ; 74 } 75 76 / * ********************* ************************************************** ************* * / 77 78 INT MAXX(INT A、INT B) 79 { 80 リターン A> B?A:B; 81 } 82 83 空隙 swapp(INTと、INT&B) 84 { 85 ^ = B ^ = A ^ = B。 86 } 87 88 int型 lowbit(int型N) 89 { 90 リターン N&( - N)。 91 } 92 93 INT Del_bit_1(int型N) 94 { 95 リターン N・(N- 1 )。 96 } 97の 98 int型の ABS面(INT A) 99 { 100 戻り A> 0?: - ; 101 } 102 103 ダブル fabss(ダブルA) 104 { 105 戻り A> 0: - ? 。 106 } 107 108 INTミネソタ州(INT A、INT B) 109 { 110 リターン <B?A:B; 111 }