2018年の第9回ブルーブリッジカップ全国大会のグループBにおけるC ++の実際の質問の要約

1.ゼロ請求書を変更します

惑星Xの紙幣の金種は、100元、5元、2元、1元、合計4種類のみです。
Xiao MingはXStarに旅行しましたが、手に持っていた100元のX Starコインは2枚しかなく、不便でした。彼はたまたまX StarBankを通り過ぎて変更を変更しました。
シャオミンは強迫性障害を抱えており、200元の交換紙幣の2元の数は1元の数のちょうど10倍であり、
残りはもちろん5元の額面であると彼は主張した

銀行のスタッフは少し恥ずかしいです、あなたは理解するのを手伝うことができます:シャオミンの要件を満たすことを前提として、少なくとも何枚の紙幣を彼と交換する必要がありますか?
(0ではなく、5元、2元、1元の金額が利用可能である必要があります)

提出する必要があるのは整数であることに注意してください。余分なコンテンツは入力しないでください。

2.レーザースタイル

惑星Xの大祭では、大気を増進するために、30個の光学機器を並べて光を宇宙に放ちます。
インストールとデバッグ中に、何らかの理由で、隣接する2つのレーザーを同時にオンにできないことが発見されました。
王様は、この種のバグで現在いくつのレーザー効果を生み出すことができるか知りたいですか?

明らかに、マシンが3台しかない場合は、合計5つのスタイルがあります。つまり、
すべて閉じています(申し訳ありませんが、現時点では無音の方が音よりも優れています。これも1つのタイプです)
、合計3つのタイプ
、2つのマシン、 1種類のみ

30は十分ではありません、王はあなたに助けを求めなければなりません。

30個のレーザーで形成できるパターンの数を示すには整数が必要です。

整数のみを送信し、余分なコンテンツは入力しないでください。

3.グレイコード

グレイコードはnビットのバイナリ表現です。
通常の2進数表現とは異なり、2つの隣接する数値間で異なるのは1桁のみです。
最初と最後の2つの数字も、わずか1桁の違いが必要です。

グレイコードを生成するための多くのアルゴリズムがあります。以下は、より一般的なものです
。コードからすべて0の生成を開始します。
奇数が生成されると、現在の番号の最後の桁のみが変更されます(0が1に変更され、1が0に変更されます)。
偶数が生成されると、最初に右端の1を見つけ、その左側の番号を変更します。
次のように、この規則によって生成された4ビットのグレイコードシーケンスである:
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000年

以下は実装コードであり、その中のロジックを注意深く分析し、下線部分に不足しているコードを入力します。(回答:a ^((a&(-a))<< 1))

実際、コードの複雑さに関係なく、aの値はグレイコードシーケンスです。a&-aの機能は次のとおりです。連続する0と2進数の下位桁の1で構成される数値。 a = 12(1100)のように、下位ビットに2つの連続する0があり、a&-a = 4(100)の場合。質問では、偶数が生成されたときに右端の1の左側にある番号を変更する必要があります。つまり、0001-> 0011、0010-> 0110、0111-> 0101、0100-> 1100、1101-> 1111、1110- > 1010、1011-> 1001、次にa&-aが機能し、下位の連続した0と1で構成される数が見つかり、1ビット左に移動してから、a、1 1 = 0、1とXORします。 0 = 1。このようにして、目標が達成されます。

#include <stdio.h>
void show(int a,int n){
	int i;
	int msk = 1;
	for(i=0; i<n-1; i++) msk = msk << 1;
	for(i=0; i<n; i++){
		printf((a & msk)? "1" : "0");
		msk = msk >> 1;
	}
	printf("\n");
} 
void f(int n){
	int i;
	int num = 1;
	for(i=0; i<n; i++) num = num<<1;
	int a = 0;
	for(i=0; i<num; i++){
		show(a,n);
		if(i%2==0){
			a = a ^ 1;
		}
		else{
			a = _________________________ ; //填空
		}
	}
}
int main(){
	f(4);
	return 0;
}

4.時計を調整します

Xiao Mingは、ハイエンドのハイエンド電子時計を購入しました。彼は時間を調整しようとしています。
M78星雲では、時間の測定単位が地球とは異なります。M78星雲の1時間はn分です。
時計には現在の数字を1つ増やすためのボタンが1つしかないことは誰もが知っています。分を調整するとき、現在表示されている数字が0の場合、ボタンを押すと1に変わり、もう一度押すと2に変わります。現在の番号がn-1の場合、1回押すと0になります。
強迫性障害の患者として、シャオミンは時計の時刻を調整する必要があります。時計の時刻が現在の時刻より1多い場合、正しい時刻に戻るにはプラスワンボタンをn-1回押す必要があります。
Xiao Mingは、時計が別のボタンを追加できる場合、それは現在の数字にkを追加することを意味する
と考えました...彼は知りたいのですが、この+ kボタンがある場合は、最適な戦略に従ってボタンを押して、任意の分からもう1分間に押す最大回数。
+ kボタンを押したときに、kを加算した後の数がn-1を超えると、nはnを法とすることに注意してください。
たとえば、n = 10およびk = 6の場合、現在の時刻が0であると仮定して、+ kボタンを2回押して2に調整します。

「入力フォーマット」

行の2つの整数n、kは、タイトルと同じ意味を持ちます。

"出力フォーマット"


1行に1つの整数とは、最適な戦略に従ってキーを押すこと、およびある時間から別の時間に押す最大回数を意味します。

「サンプル入力」

5 3

「サンプル出力」

2

「サンプル説明」

時間が正しい場合は、0回押します。それ以外の場合、押される回数と一連の操作の関係は次のとおりです
。1:+1
2:+ 1、+ 1
3:+3
4:+ 3、+ 1

"データ範囲"

データの30%の場合0 <k <n <= 5
データの60%の場合0 <k <n <= 100
データの100%の場合0 <k <n <= 100000

リソース契約:

ピークメモリ消費量(仮想マシンを含む)<256MCPU
消費量<1000ms

要件に厳密に従って出力し、「入力してください...」のような余分なコンテンツを過剰に印刷しないでください。

5.ビルドブロック

Xiao Mingは、ビルディングブロックに非常に興味を持っています。彼のビルディングブロックはすべて同じサイズの通常の立方体です。
ビルディングブロックの際、シャオミンはmブロックを土台として選び、テーブルの上に隙間を空けずに並べて、0階と呼びました。
後で、Xiao Mingは、最初のレイヤー、2番目のレイヤー、...をn番目のレイヤーまで配置できます。ブロックを配置するときは、次の3つのルールに従う必要があります。

ルール1:各ビルディングブロックは、特定のビルディングブロックの真上に配置し、次のレイヤーのビルディングブロックと位置合わせする必要があります。
ルール2:同じレイヤーのビルディングブロックは、間にギャップがないように連続して配置する必要があります。
ルール3:シャオミン気に入らない場所にブロックを配置することはできません。

その中で、シャオミンが嫌いな場所が図面に記されています。図面にはn本の線があり、下から上への各線は、ビルディングブロックの最初からn番目のレベルに対応しています。各行にはm文字あり、文字は「。」または「X」の場合があります。「X」は、この位置がXiaoMingに好まれないことを意味します。
さて、シャオミンはブロックを配置する方法がいくつあるか知りたいと思っています。彼は彼が答えを計算するのを手伝うためにブルーブリッジカップに参加したあなたを見つけました。
この回答は大きい可能性があるため、この回答の結果を1000000007(10億と7)を法として答えるだけで済みます。
注:基礎に何も置かないことも一種の計画と見なされます。

【入力フォーマット】

入力データの最初の行には、図面のサイズを表す2つの正の整数nとmがあります。
次のn行は、各行にm文字があり、図面の説明に使用されます。各文字は「。」または「X」のみにすることができます。

[出力フォーマット]

1000000007を法とする答えの結果を表す整数を出力します。

【サンプル入力1】

23

X.X。

【サンプル出力1】

4

【サンプル説明1】

成功した配置(Oはブロックの配置を意味します):(
1)

X.X。
(2)
XOX

(3)
OX
OX。
(4)

X.XO

【サンプル入力2】

3 3
... X
.X。

【サンプル出力2】

16

【データサイズ合意】

10%データの場合、n = 1、m <= 30;
40%データの場合、n <= 10、m <= 30;
100%データの場合、n <= 100、m <= 100。

6.行列の加法

多数の筆記試験と面接の後、シャオミンはマクロハード社への参入に成功しました。
今日、Xiao Mingの仕事は、そのようなテーブルを埋めることです。
テーブルにはn行とn列があり、行と列の番号は1から始まります。
i行目のj番目の要素の値は、GCD(i、j)の正方形である
GCDは最大公約数を表し、以下では、この表の最初の4行の最初の4つの列である:
1 1 1 1
1 4 1 4
1 1 9 1
1 4 1 16

Xiao Mingは突然奇妙な考えを思いつき、この表のすべての要素の合計を知りたがっていました。
時計が大きすぎるので、彼はコンピューターの力を使いたいと思っています。

「入力フォーマット」

1行あたりの正の整数nの意味については、質問を参照してください。

"出力フォーマット"

線上の数字は、すべての要素の合計を表します。答えは比較的大きいので、モジュロ(10 ^ 9 + 7)の後に結果を出力してください(つまり、10億と7)。

「サンプル入力」

4

「サンプル出力」

48

"データ範囲"

データの30%の場合、n <= 1000
、データの10%、n = 10 ^ 5
、データの60%、n <= 10 ^ 6
、データの100%、n <= 10 ^ 7

おすすめ

転載: blog.csdn.net/weixin_44723496/article/details/109407652