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

1.一歩離れて

昏睡状態から目覚めたシャオミンは、惑星Xの放棄されたトロッコに閉じ込められていることに気づきました。
トロッコはまっすぐな、放棄されたトラックに駐車されました。
彼の前には、それぞれ「F」と「B」と書かれた2つのボタンがあります。

Xiao Mingは突然、これら2つのボタンがトロッコを制御してトラックを前後に移動できることを思い出しました。
Fを押すと、97メートル進みます。Bを押して127メートル戻ります。
薄暗い光を通して、シャオミンは彼のちょうど1メートル前に監視プローブがあるのを見ました。
彼は仲間から助けを得る機会を得る前に、カメラのすぐ下でトロッコを止めさせようとしなければなりません。
おそらくそれはFとBの複数の操作を通して行うことができます。

トロッコの電力が足りず、黄色の警告灯が静かに点滅しています...
FまたはB操作を実行するたびに、一定量のエネルギーが消費されます。
Xiao Mingは、トロッコを彼の前にちょうど1メートル離れた場所に駐車するのに必要な操作の数をすばやく計算しました。

目標を達成するために必要な最小操作数を入力してください。

2. 凑平方数

0から9までの10個の数字を複数のグループに分けます。各グループはたまたま平方数です。これは実行できます。
例:0、36、5948721

別の例:
1098524736
1、25、6390784
0、4、289、15376
など...

0は独立した数値として使用できますが、複数桁の先頭としては使用できないことに注意してください。
グループ化する場合、すべての番号を使い切る必要があり、繰り返したり省略したりすることはできません。

小さいグループのデータの順序がカウントされない場合、いくつの異なるグループ化スキームがありますか?

3.ポーンの移調

チェス盤には、チェスの駒Aとチェスの駒Bがn個並んでいます。
それらの間にスペースがあり、次のように「。」で表されます。

AAA.BBB

これで、すべてのAピースとBピースが位置を交換する必要があります。
ピースを移動するためのルールは次のとおりです。

  1. ピースAは右にのみ移動でき、ピースBは左にのみ移動できます。
  2. 各ピースは、隣接する空の位置に移動できます。
  3. 各ピースは異なるピースをスキップして空の位置に落ちることができます(AはBをスキップするか、BはAをスキップします)。

AAA.BBBは移動できます:
移動A ==> AA.ABBB
移動B ==> AAAB.BB

飛び降りる例:
AA.ABBB ==> AABA.BB

次のプログラムは、AB転置の機能を完了します。ソースコードを注意深く読んで分析し、下線部分に不足しているコンテンツを入力してください。

#include <stdio.h>
#include <string.h>

void move(char* data, int from, int to)
{
    data[to] = data[from];
    data[from] = '.';
}

int valid(char* data, int k)
{
    if(k<0 || k>=strlen(data)) return 0;
    return 1;
}
    
void f(char* data)
{
    int i;
    int tag;
    int dd = 0; // 移动方向
    
    while(1){
        tag = 0;
        for(i=0; i<strlen(data); i++){
            if(data[i]=='.') continue;
            if(data[i]=='A') dd = 1;
            if(data[i]=='B') dd = -1;
            
            if(valid(data, i+dd) && valid(data,i+dd+dd) 
            && data[i+dd]!=data[i] && data[i+dd+dd]=='.'){ 
            //如果能跳... 
                move(data, i, i+dd+dd);
                printf("%s\n", data);
                tag = 1;
                break;
            }
        }
        
        if(tag) continue;
        
        for(i=0; i<strlen(data); i++){
            if(data[i]=='.') continue;
            if(data[i]=='A') dd = 1;
            if(data[i]=='B') dd = -1;            
                 
            if(valid(data, i+dd) && data[i+dd]=='.'){ 
            // 如果能移动...
                if( ______________________ ) continue;  //填空位置 
                move(data, i, i+dd);
                printf("%s\n", data);
                tag = 1;
                break;
            }
        }
        
        if(tag==0) break;                    
    }
}
    
int main()
{
    char data[] = "AAA.BBB";    
    f(data);
    return 0;
}

4.ロボットタワー

XプラネットのロボットパフォーマンスチアリーダーのコスチュームはAとBの2種類があります。
今回彼らが行ったのは、ロボットタワーを建てることでした。

同様:

A
BB
ABA
AABB
BBBAB
ABABBA

チームのタワー構築ルールは次のとおりです。

AはAAまたはBBの肩にのみ立つことができます。
BはABまたはBAの肩にのみ立つことができます。

あなたの仕事は、チアリーダーがAとBの人数を考慮して、いくつの種類の塔を形成できるかを計算するのを助けることです。

スペース(0 <M、N <500)で区切られた2つの整数MとNの行を入力して、それぞれAとBの人数を示し、人数の合理性を確保します。

生成できるパターンの数を示すには整数が必要です。

例えば:

ユーザー入力:

1 2

プログラムは次のように出力する必要があります。

3

もう一つの例:

ユーザー入力:

3 3

プログラムは次のように出力する必要があります。

4

5.スクエアダンス

LQ市の市民広場は多角形で、大理石の床タイルで覆われています。

床タイルは、コーディネートペーパーのように正方形に配置されています。
4つのレンガが交わる点を原点として、床タイルの2つの辺は正の方向にあり、レンガの辺の長さは横座標と縦座標の単位長さであり、横座標と縦座標が整数は4です。レンガの交点(正方形の場合)。

正方形のレンガは単調で退屈ですが、正方形で踊る市民にとって優れた参考資料となります。毎晩、たくさんの市民が踊りに来ます。
ダンサーは毎回完全なレンガを選んで踊ります。2人が同じレンガを選ぶことはありません。レンガの角が欠けていたり、正方形の端に不完全なエッジがある場合、誰もこのレンガを選びません。
(正方形の例については、[図1.png]を参照してください)

さて、広場の形を教えてください。LQ市長が広場で同時に踊れる市民の数を計算するのを手伝ってください。

[入力形式]入力の最初の行には整数nが含まれており、正方形がn辺であることを示します(したがって、n個の頂点があります)。

次のn行は、それぞれ2つの整数で、n辺のポリゴンの各頂点の座標を順番に表します(つまり、正方形のエッジの角がレンガの上部の角にあります。データは、正方形が単純なポリゴン。

【出力形式】最大で何人の市民が広場で踊れるかを示す整数を出力します。

【サンプル入力】53 3 6 4 4 1 1 -1 0 4

【サンプル出力】7

【サンプル説明】正方形を図1.pngに示します。完全な床タイルが7つあるので、最大7人の市民が一緒に踊ることができます。

img

6.スパニングツリー

n mの格子点グラフが与えられると、n行とm列、合計n mの頂点が含まれ、隣接する頂点間にエッジがあります。
【写真1.png】3 * 4格子グラフの例を示します。

ここに画像の説明を挿入

[図2.png]に示すように、2行目と3列目、3行目と1列目の頂点を削除した後、グラフで一部の頂点とその隣接するエッジが削除された場合。

ここに画像の説明を挿入

グラフのスパニングツリーには、グラフ内のすべての頂点と一部のエッジが含まれるため、任意の2つの頂点間のエッジで構成される一意のパスがあります。2つのスパニングツリーに異なるエッジが含まれている場合、それらは異なると見なされます。上の図には31の異なるスパニングツリーがあり、そのうち10はサイドaに選択されておらず、21はサイドaに選択されています。
格子グラフに保持されている頂点の情報を考慮して、グラフに存在する異なる全域木がいくつあるかを計算してください。

[入力形式]入力の最初の行には、スペースで区切られた2つの整数n、mが含まれ、グリッドグラフの行と列の数を示します。

次のn行では、各行にm文字があり(中央に区切り文字はありません)、各文字は大文字のEまたは大文字のNである必要があります。Eは対応する頂点が存在することを意味し、Nは対応する頂点が存在しないことを意味します。存在します。少なくとも1つの頂点があることを確認してください。

【出力形式】スパニングツリーの数を示す整数を含む1行を出力します。答えは大きいかもしれません、あなたは1000000007で割った答えの残りを計算する必要があるだけです。

【サンプル入力】34

EEEE

1

ニー

【サンプル出力】31

おすすめ

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