問題の男Q8計画の水溶液

T1生物学的
な質問の意味や数はそれぞれにシミュレートするために保存されています

書式#include <cstdioを> 
に#define int型、長い長い
名前空間stdを使用。
int型NUM [100010]、[100010]。
main()の符号付き
{ 
	//freopen("biology.in","r",stdin)を、
	//freopen("biology.out","w",stdout); 
    int型のk; 
    scanf関数( "%のD"、&K); 
    [0] = 1; 
    以下のために(INT i = 1; iは= Kを<; iは++)
    { 
    	IF(I%2 == 0)[I] = I / 2 + 1。
    	他の[I] = 1; 
    } 
    NUM [0] = 1。
    以下のために(INT i = 1; iは= Kを<; iは++)
    { 
    	NUM [I] = NUM [I-1] + [I]。
    } 
    のprintf( "%のLLD"、NUM [K-1])。
    0を返します。
}

  


T2化学は
見つけることが難しい、Nの中間数をエミュレートすることができる
角度の数二十から二差はAD、BC、DA、CBである
ABS(AD)+ ABS(BCある貧しい )
基の数を固定し、行うことができます繰り返さないように
、最後のnが取ることができます

書式#include <cstdioを> 
する#include <cmath> 
に#define int型、長い長い
名前空間stdを使用。
main()の符号付き
{ 
	//freopen("chemistry.in","r",stdin)を、
	//freopen("chemistry.out","w",stdout); 
	int型のn; 
	scanf関数( "%のLLD"、&N); 
	、B、C、Dのint; 
	scanf関数( "%LLD%LLD%LLD%LLD"、&、&B、&C、およびD)。
	INT ANS =(N-ABS(AD)-abs(BC))* N。
	printf( "%のLLD"、ANS)。
	0を返します。

}

  


T3言語
1〜N高利貸しで、貢献は1〜I-1を生成する
DPを[I] [j]は、番号jを表し、I前の貢献に
DPとして[I] [J] = sum_ {DP [I-1] [JK]}(k = 0 - > I-1)で
見やすいとプレフィックス使用して最適化することができる
最後のO(N * k)を

書式#include <cstdioを> 
する#include <CCTYPE> 
std名前空間を使用しました。
const int型のmod = 998244353; 
int型の合計[5050] [5050]; 
int型のDP [5050] [5050]; 
INTはREAD()
{ 
  int型、F = 1、X = 0。
  CHAR CH =」「; 
  (!; isdigit(CH); CH = getchar関数())のための( ' - ' CH ==)であれば、F * = - 1; 
  用(; isdigit(CH)、CH = GETCHAR())X = X * 10 + CH-'0' 。
  F * xを返します。
} 
int型のmain()
{ 
	int型N、M。
	N =読み取ります(); 
	M =読み取ります(); 
	DP [0] [0] = 1。
	以下のために(INT i = 0; I <= M; iは++)
	合計[0] [I] = 1。
	(; iが<= N I ++はiは1 = INT)のために
	{ 
		ため(INT J = 0; J <= Mであり、j ++)
		{ 
			IF(iは<= j)のDPを[I] [J] =((DP [I ] [J] +和[I-1]〜[J])%MOD-和[I-1] [JI] + MOD)%MOD。 
			[他DP [I] [J] =(DP [I] [J] +和I-1]〜[J])%のMOD。
			(!J)であれば合計[I] [J] = DP [I] [J]。
			他和[I] [J] =(SUM [I]、[J-1] + DP [I] [J])%MOD。
		} 
	} 
	のprintf( "%LLDする\ n"、DP [n]は[M])。
	0を返します。
}

  


T4英語を
導入することができるだけ01、中央値の中間点に最も近い最終溶液が隣接していることをカウントするために2つの等しいグループに起こり得る
二分法を満たすことができる描画
2点を頂点に直接

書式#include <cstdioを> 
する#include <CCTYPE> 
書式#include <アルゴリズム> 
std名前空間を使用しました。
[1000010] int型。
int型のn; 
INTはREAD()
{ 
  int型、F = 1、X = 0。
  CHAR CH =」「; 
  (!; isdigit(CH); CH = getchar関数())のための( ' - ' CH ==)であれば、F * = - 1; 
  用(; isdigit(CH)、CH = GETCHAR())X = X * 10 + CH-'0' 。
  F * xを返します。
} 
int型のチェック(intはX)
{ 
	ため(INT i = 0; iが<= N-2、iは++)
	{ 
		IF(([NI-1]> = X)==([NI]> = X))
		[NI-1]> = xを返します。
		((N + I + 1]> = X)==([N + i]は> = X))であれば
		戻り[N + I + 1]> = xと; 
	} 
	[1]> = xを返します。
} 
)(INTメイン
{ 
	)(N =読み取ります。
	(; iが2-1 <= N * I ++はiは1 = INT)のために
	{ 
		[I] =(読み取り)
		Mmaxを= MAX(Mmaxを、[I])。
	} 
	int型のL = 1、R = Mmaxを。
	int型ANS = 1; 
	一方、(L <= R)
	{ 
		int型ミッド=(L + R)/ 2。
		IF(チェック(MID))L =ミッド+ 1、ANS =ミッド。
		他に、R =半ば1; 
	} 
	のprintf( "%dの"、ANS)。
}

  


T5、地理的には
2つのフェンウィックツリーを維持検討
から<= Lにおいて、R L <= Rを差し引きます

#include <cstdioを> 
の#define lowbit(x)は、x&( - X)
の#define INT長い長い
名前空間stdを使用。
int型のn; 
構造体ノード
{ 
  INT [200010]。
  ボイド追加(INT X)
  { 
	(x <= n)の一方
	{ 
		++ [X]。
		X + = lowbit(X)。
	} 
  }   
  int型の数(INT X)
  { 
	int型の和= 0。
	一方、(X!= 0)
	{ 
		合計+ = A [X]。
		X- = lowbit(X)。
	} 
	の和を返します。
  } 
}。
ノードANS1、ANS2。
署名されたメイン()
{	 
	scanf関数( "%のLLD"、&N); 
	以下のために(INT i = 1; iが++; iが<= N)
	{ 
		int型OPTと、 
		scanf関数( "%のLLD"、およびOPT)を、
		IF(OPT == 1)
		{ 
			int型のL、R。
			scanf関数( "%のLLDの%のLLD"、&L&R)。
			ans1.add(L)。	
			ans2.add(R)
		} 
		{ 
			int型のL、R。
			scanf関数( "%のLLDの%のLLD"、&L&R)。
			INT ANS = ans1.count(R)-ans2.count(L-1)。
			//のprintf( "%D%D \ n"、ans1.count(R)、ans2.count(L-1))。
			printf( "%LLDする\ n"、ANS)。		
		} 
	} 
}

  


T6履歴
レコード各フロントの出現数におけるPI-1の数
の最大値の全配列およびメンテナンス
各着信の唯一数が最大値より大きいか否かを判断する
元の値を選択する一方、選択された、この数を配置されているよりも大きくシーケンス

書式#include <cstdioを> 
する#include <CCTYPE> 
std名前空間を使用しました。
[1000010] INT、NUM [1000010]。
INTはREAD()
{ 
  int型、F = 1、X = 0。
  CHAR CH =」「; 
  (!; isdigit(CH); CH = getchar関数())のための( ' - ' CH ==)であれば、F * = - 1; 
  用(; isdigit(CH)、CH = GETCHAR())X = X * 10 + CH-'0' 。
  F * xを返します。
} 
int型のmain()
{ 
	//freopen("history_2.in","r",stdin)。
	//freopen("history.out","w",stdout); 
	INT、N =読み取ります()。
	(; iが<= N I ++はiは1 = INT)のための
	[I] =(読み取り)
	INT T =読み取ります()。
	一方、(t--)
	{ 
		int型、P =読み取ります()。
		int型ANS1 = 0、ANS2 = 0; 
		NUM [I]] ++のために(; iは、P <I ++はI = 1 INT)。
		ため(= PをI int型、iがn = <; iは++)
		{ 
			int型OPTと、
			IF([I]> = POS)OPT = A [i]は、
			他の
			{ 
				NUM [[I]] ++; 
				しばらく(NUM [POS] && POS!)pos--。
				NUM [POS] - 。
				OPT = POS; 
			} 
			IF((I-P + 1)%2)ANS1 + = OPT。
			他ANS2 + =オプト; 
		} 
		ための式(I = 1をint型、iがpは<; Iは++)
		{ 
			int型OPT。
			しばらく(NUM [POS] && POS!)pos--。
			NUM [POS] - 。
			OPT = POS; 
			IF((I +(N-P + 1))%2)ANS1 + = OPT。
			他ANS2 + =オプト; 
		} 
		のprintf( "%d個の\ n"、ANS1-ANS2)。		
	} 
 	0を返します。
}

  なぜなら、あまりにも多くの食べ物のT7,8はQAQを書き込むことはできません

おすすめ

転載: www.cnblogs.com/ninelifecat/p/11488414.html