彗星OJコンテスト4

  :出席。

#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 !!!!! 
}

  まず、つぶやきました。

 

おすすめ

転載: www.cnblogs.com/Gloid/p/10936526.html