:出席。
#include <ビット/ STDC ++ H> 名前空間STDを使用して、 #defineは長い長いっ の#define INF十億十 チャーGETC(){チャーC = GETCHAR();((C < '' || C> 'Z')&&(C < '' || C> Z 'しばらく')&&(C <' 0 '|| C>' 9' ))C = GETCHAR();戻りC;} N int型GCD(int型N、int型M){戻りM == 0:GCD(M、? N%のM);} 読み取るINT() { int型のx = 0、F = 1; CHAR C = GETCHAR()。 一方、(C < '0' || C> '9'){IF(C == ' - ')は、f = -1; C = GETCHAR();} 一方(> = '0' && C <= '9 C 「)X =(X << 1)+(X << 3)+(C ^ 48)、C = GETCHAR()。 x * Fを返します。 } Tを、INT [6]、CNT [6]。 )(メイン符号付き { T =リード(); (T--)一方 { )[I] =(読み取り式(I ++; iが= 5 <I = 1 INT)ため、 memset(CNT、0、はsizeof(CNT))。 CNT [I]] ++ための式(I ++; = 5 iは<I = 1 INT)。 int型のmx = 0; <;(CNT [i]の場合は、(= 5 I ++はCNT [MX])MX = iは、iは1 = INT)>用 coutの<< MX <<てendl; } 0を返します。 // NOTICE LONG LONG !!!!! }
B:K奇関数の値は1であり、kは各出現K + 1番目0偶数です。
#include <ビット/ STDC ++ H> 名前空間STDを使用して、 #defineは長い長いっ の#define INF十億十 チャーGETC(){チャーC = GETCHAR();((C < '' || C> 'Z')&&(C < '' || C> Z 'しばらく')&&(C <' 0 '|| C>' 9' ))C = GETCHAR();戻りC;} N int型GCD(int型N、int型M){戻りM == 0:GCD(M、? N%のM);} 読み取り11() { LL X = 0、F = 1; CHAR C = GETCHAR()。 一方、(C < '0' || C> '9'){IF(C == ' - ')は、f = -1; C = GETCHAR();} 一方(> = '0' && C <= '9 C 「)X =(X << 1)+(X << 3)+(C ^ 48)、C = GETCHAR()。 x * Fを返します。 } int型のT。 LLのL、R、K。 LLのF(LLのX) { 戻りX-(X + 1)/(K + 1)。 } )(主符号付き { )Tは=読み取ります(。 一方、(T--) { L =読み取る()、R =読み取り()、K =読み取ります(); もし(K&1)COUT << R-L + 1 << ENDL。 他COUT << F(R)-f(L-1)<< ENDL。 } 0を返します。 // NOTICE LONG LONG !!!!! }
C:カット垂直力列挙ナイフの数は、マトリックスは分割位置以下の場合の行に圧縮することができ、分割位置にダウンリンクの場合を押すことができ、寸法及び暴力プレフィックスを検証します。
#include <ビット/ STDC ++ H> 名前空間STDを使用して、 #defineは長い長いっ の#define INF十億十 の#define N 1010 )CHAR GETC({チャーC = GETCHAR();(C < 'A' &&((C < '' || C> 'Z')ながら|| C> 'Z')&&(C < '0' || C> '9'))C = GETCHAR();戻りC;} int型GCD(整数nは、INTのM){戻りM == 0 N:? GCD(M、N%のM);} (読み取りLL) { LL X = 0、F = 1; CHAR C = GETCHAR()。 一方、(C < '0' || C> '9'){IF(C == ' - ')は、f = -1; C = GETCHAR();} 一方(> = '0' && C <= '9 C 「)X =(X << 1)+(X << 3)+(C ^ 48)、C = GETCHAR()。 x * Fを返します。 } int型T、N、M、K、TOT、[N] [N]、S [N]、S2 [N]、S3 [N] [N]、ANS [N << 1]、方法[N < <1]。 int型のcalc(int型のx、 INT yを、int型のL、int型の) { [ザ] S3リターン[R] -S3 [X-1] [R] -S3 [ザ] [L-1] + S3 [X-1] [L-1] ; } )(主符号付き { S3 [I] [J] = S3 [I-1]〜[J] + S3 [I ] [J-1] -S3 [I-1] [J-1] + 1 [I] [J]。 T =読み取ります(); (T--)一方 { N =読み取る()、M =読み取る()、K =読み取る(); TOT = 0。 以下のために(; iがn = <; iは1 = int型I ++) のための(INT J = 1; J <= Mであり、j ++) { チャーC = GETC()。 IF(C == '0')[I] [J] = 0;他[I] [J] = 1、TOT ++。 } (i = 1 int型私は++; iが<= N)のために { S [I] = sの[I-1]; (J ++; J <= M INT J = 1)のための ([I] [J])S [i]は++であれば、 } ため(INT I = 1; I <= M; iは++) { S2 [i]は= s2の[I-1]; (J ++; J <= N INT J = 1)のための ([J] [i])とS2 [i]は++であれば、 } のために(iは++; iがn = <I = 1 INT) のための(INT J = 1; J <= Mであり、j ++) TOT = N * M-TOT。 BOOL ISAC = 0。 以下のために(INT i = 1; iは= Kを<; iは++)ANS [I] = 2010。 以下のために(INT i = 0; iは= Kを<; iは++) IF(TOTの%((I + 1)*(K-I + 1))== 0) { int型の和= TOT /((I + 1)* (K-I + 1))。 int型最後= 0; int型CNT = 0; ブールフラグ= 1。 (INT J = 1、J <N; J ++)のための (CNT <I)なら 、{ iがK-+和*(==)((J-最後)* M-(S [J] -s [最終]もし1)) { 方法[++ CNT] = J。 最後= J; } そうであれば((J-最後)* M-(S [J] -s [最終])>和*(K-I + 1)){フラグ= 0;破る;} } もし(CNT <I)フラグ= 0; IF(フラグ) { 0 =最後; 用(INTのJ = 1; J <Mであり、j ++) (CNT <K)場合 { IF((J-最後)* N-(S2 [J] -S2 [最終])==和*(I + 1)) { 方法[++ CNT] = N + J-1。 最後= J; } そうであれば((J-最後)* N-(S2 [J] -S2 [最終])>和*(I + 1)){フラグ= 0;ブレーク;} } } もし(CNT <K)フラグ= 0; (フラグ)であれば { BOOL U = 1。 用(INT X = 1であり、x <= I; X ++) { ため(INT Y = I + 1、Y <= K; Y ++) { IF(CALC(方法[X-1] + 1、方法[X] !(Y == I + 1:方法[Y-1] -N + 2)、方法[Y] -N + 1)=合計){U = 0;ブレーク;} } !IF(U)休憩; } (U)であれば { ISAC = 1。 (J ++; J <= K INT J = 1)のための { IF(方法[J] <ANS [J]) { のための(; X <= K; INT X = 1×++)ANS [X] =方法[X] ; ブレーク; } それ以外の場合(方法[J]> ANS [J])ブレーク。 } } } } のprintf( "インポッシブル\ nを")であれば(ISAC!)。 そうでなければ { (I = 1をint型、I <K; iが++)のためのprintf( "%dの"、ANS [I])を、 printf( "%d個の\ n"、ANS [K])。 } } 0を返します。 // NOTICE LONG LONG !!!!! }
D:9から0を見ることができる各テーブルを再生するには10K〜10K + 9の範囲内で一度に表示され、その後、断片化されたセクションを数えるだけです。
#include <ビット/ STDC ++ H> 名前空間STDを使用して、 #defineは長い長いっ の#define INF十億十 チャーGETC(){チャーC = GETCHAR();((C < '' || C> 'Z')&&(C < '' || C> Z 'しばらく')&&(C <' 0 '|| C>' 9' ))C = GETCHAR();戻りC;} N int型GCD(int型N、int型M){戻りM == 0:GCD(M、? N%のM);} 読み取り11() { LL X = 0、F = 1; CHAR C = GETCHAR()。 一方、(C < '0' || C> '9'){IF(C == ' - ')は、f = -1; C = GETCHAR();} 一方(> = '0' && C <= '9 C 「)X =(X << 1)+(X << 3)+(C ^ 48)、C = GETCHAR()。 x * Fを返します。 } のLL L、R、[30]、F [1000000]。 int型FF(LLのN) { IF(N <1000000)リターンF [N]。 int型CNT = 0; 一方、(N)[++ CNT] = N%10、N / = 10。 (INT J = 1; J <CNT; J ++)のための[J] + = [J + 1]。 [CNT] = 0; LL T = 0。 用(INT J = CNT; J> = 1; j--)T = T * 10 + [J]%10。 FF(t)を返します。 } LL計算値(LLのN) { int型、S = 0; int型、W =用FF(* 10 N / 10)。 + = 10%(中/ 10 * 10)+(W)S;(私は++; iが<= N LL I = N / * 10)のための リターンN / 10 * 45 + S。 } ()主符号付き { F [I] = I(Iは++; iが= 9 <I = 0をINT)ため、 以下のために(私は10 = int型、iは= 1000000 <; iは++) { LLのCNT = 0、X = I。 一方、(X)[++ CNT] = X%10、X / = 10。 (INT J = 1; J <CNT; J ++)のための[J] + = [J + 1]。 [CNT] = 0; LL T = 0。 用(INT J = CNT; J> = 1; j--)T = T * 10 + [J]%10。 F [I] = F [T]。 } INT T =読み取ります()。 一方、(T--) { (読み取らL =)、R =リード()。 COUT << CALC(R)-calc(L-1)<< ENDL。 } 0を返します。 // NOTICE LONG LONG !!!!! }
まず、つぶやきました。