2015第4回C / C ++グループAブルーブリッジカップ州大会実際の質問

ブルーブリッジカップの長年にわたるトピックコラムです。更新され、前年度からの実際の質問と回答が公開されます。友達を歓迎して私に注意を払ってください。あなたの好きなものと注意が私にとって最高の動機です!
毎日1つの本当の質問を更新するので、お楽しみに

Lanqiaoカップの過去の論文と詳細な回答


最初の問題:方程式の整数解

タイトルの説明
方程式:a ^ 2 + b ^ 2 + c ^ 2 = 1000
(または[図1.jpg]を参照)
この方程式には整数解がありますか?a、b、c = 6,8,30は一連のソリューションです。
別の適切な解決策を計算できますか?

ソリューションの最小数を入力してください。
ここに画像の説明を挿入

トピック分析
トピックコード



質問2:ギャラクシー爆弾

タイトル説明
X銀河の広大な空間に浮かぶX星の人工「爆弾」がたくさんあり、宇宙の道路標識として使われています。
各爆弾は数日で爆発するように設定できます。
たとえば、アルファ爆弾が2015年1月1日に配置され、時間が15日である場合、2015年1月16日に爆発します。
2014年11月9日に1000日のタイミングで配置されたベータ爆弾があります。爆発した正確な日付を計算してください。

日付を入力してください。形式はyyyy-mm-ddで、4桁の年、2桁の月、2桁の日付です。例:2015-02-19
フォーマットに厳密に従って書いてください。他の単語や記号は表示できません。
トピック分析
トピックコード



質問3:素晴らしい数字

タイトルの説明
シャオミンは奇妙な番号を見つけました。その正方形と立方体は、0から9までの10個の数字のそれぞれを使用し、1回だけ使用します。
この数が何であるか推測できますか?
トピック分析
トピックコード



4番目の質問:グリッドでの出力

タイトルの説明
StringInGrid関数は、指定された文字列を指定されたサイズのグリッドに出力します。
ストリングは、水平方向と垂直方向の両方の中央に配置する必要があります。
文字列が長すぎると、切り捨てられます。
正確に中央に配置できない場合は、少し左または上に移動できます。
次のプログラムはこのロジックを実装しています。下線部分に不足しているコードを入力してください。

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

void StringInGrid(int width, int height, const char* s)
{
    
    
	int i,k;
	char buf[1000];
	strcpy(buf, s);
	if(strlen(s)>width-2) buf[width-2]=0;
	
	printf("+");
	for(i=0;i<width-2;i++) printf("-");
	printf("+\n");
	
	for(k=1; k<(height-1)/2;k++){
    
    
		printf("|");
		for(i=0;i<width-2;i++) printf(" ");
		printf("|\n");
	}
	
	printf("|");
	
	printf("%*s%s%*s",_____________________________________________);  //填空
	          
	printf("|\n");
	
	for(k=(height-1)/2+1; k<height-1; k++){
    
    
		printf("|");
		for(i=0;i<width-2;i++) printf(" ");
		printf("|\n");
	}	
	
	printf("+");
	for(i=0;i<width-2;i++) printf("-");
	printf("+\n");	
}

int main()
{
    
    
	StringInGrid(20,6,"abcd1234");
	return 0;
}

タイトル内のデータについては、それが必要出力:
±----------------- +
| |
| ABCD1234 |
| |
| |
±---------- --- ---- +
ここに画像の説明を挿入

(位置合わせに問題がある場合は、[図1.jpg]を参照してください)
質問分析用の質問
コード



質問5:9つのグループスコア

タイトルの説明
1,2,3 ... 9これらの9つの数字はスコアを形成し、その値は正確に1/3です。どのようにグループ化するのですか?
次のプログラムはこの機能を実装しています。下線部分に不足しているコードを入力してください。

#include <stdio.h>

void test(int x[])
{
    
    
	int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3];
	int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8];
	
	if(a*3==b) printf("%d / %d\n", a, b);
}

void f(int x[], int k)
{
    
    
	int i,t;
	if(k>=9){
    
    
		test(x);
		return;
	}
	
	for(i=k; i<9; i++){
    
    
		{
    
    t=x[k]; x[k]=x[i]; x[i]=t;}
		f(x,k+1);
		_____________________________________________ // 填空处
	}
}
	
int main()
{
    
    
	int x[] = {
    
    1,2,3,4,5,6,7,8,9};
	f(x,0);	
	return 0;
}

トピック分析
トピックコード



質問6:カードの種類の数

タイトルの説明
シャオミンはカジノXに乗っ取られ、他の3人とトランプをすることを余儀なくされました。
トランプのデッキ(大小の切り札なし、合計52枚)。4人に均等に配布され、それぞれに13枚のカードがあります。
このとき、シャオミンの頭に突然疑問が浮かびました。
スーツを考慮せず、ポイントだけを考慮し、カードの順番を考慮しない場合、最初のカードの組み合わせは何種類手に入れることができますか?
トピック分析
トピックコード



質問7:ブレスレットスタイル

タイトルの説明
シャオミンには、3つの赤珊瑚、4つの白珊瑚、5つの黄色瑪瑙があります。
彼はガールフレンドに贈るブレスレットとしてそれらを輪になって使いたかったのです。
Xiao Mingが知りたいのは、ブレスレットを自由に回転または反転できると考える場合、さまざまな組み合わせがいくつあるかということです。
トピック分析
トピックコード



質問8:飲み物の償還

トピックの説明
LeyangyangBeverageFactoryはプロモーション活動を行っています。Leyangyang Cタイプ飲料、3キャップ付きで、Cタイプ飲料の別のボトルを交換でき、永久にリサイクルできます(ただし、一時的なローンやクレジットは許可されていません)。

Xiao Mingがボトルのキャップを無駄にせず、可能な限り活動に参加する場合、最初に購入したnボトルの飲料について、最終的に何本の飲料を飲むことができるかを計算してください。

入力:購入する飲み物の数を示す整数n(0 <n <10000)
出力:実際に取得した飲み物の数を示す整数

例:
ユーザー入力:
100
プログラムは出力する必要があります:
149

ユーザー入力:
101
プログラムは出力する必要があります:
151

リソースの合意:
ピークメモリ消費量<256MCPU
消費量<1000ms
質問分析
質問コード



質問9:ベースダイス

タイトルの説明
ギャンブルのATMは、晩年にサイコロに夢中になりました。つまり、サイコロを曲がらずに重ねて、四角い円柱を形成しました。
長期間の観察の後、ATMは安定したサイコロの謎を発見しました:いくつかの数字の顔は互いに反発します!
最初にサイコロを標準化しましょう。1の反対は4、2の反対は5、3の反対は6です。
相互排除のグループがm個あるとすると、各グループの2つの数字の面は互いに近く、サイコロは安定して立ち上がれません。
Atmは、サイコロのベースとなるさまざまな方法を計算したいと考えています。
2つの方法で対応する高さのサイコロの対応する番号の方向が同じである場合に限り、サイコロをベースにする2つの方法は同じです。
解が多すぎる可能性があるため、10 ^ 9 +7を法として結果を出力してください。

ATMのサイコロの数を過小評価しないでください〜

「入力フォーマット」
最初の行にある2つの整数nmnは
、サイコロの数を表します。
次のm行には、各行に2つの整数abがあり、数値aとbを近づけることはできません。

「出力形式」
の行には数字があります。これは、10 ^ 9 +7を法とする答えを意味します。

「サンプル入力」
21
1 2

「サンプル出力」
544

データ
の30%の「データ範囲」:n <=
60%の5データ:n <=データの100〜100%
:0 <n <= 10 ^ 9、m <= 36
タイトル分析
コード



質問10:災害後の再建

タイトルは
、パールシティにN(<= 50000)の住宅地があり、M(<= 200000)の双方向道路が住宅地間を接続していることを示しています。これらの集落は両方とも、双方向の道路で行くことができます。この状況は、深刻な地震がすべてのM道路を破壊した最近まで続きました。
地震後、Pearはこれらの道路のいくつかを修理する予定です.i番目の道路の修理にはPiの時間がかかります。ただし、Pearはすべてのポイントを接続することを意図していませんが、それらを接続するためにいくつかの特別にラベル付けされたポイントを選択します。
PearにはQ(<= 50000)のクエリがあります。尋ねるたびに、[l、r]の間にあり、mod K = Cであるすべてのポイントを選択し、いくつかのパスを修復して接続します。すべての道路の修理を同時に開始できるため、修理が完了するまでの時間は、最も時間がかかる道路、つまり関係する道路の中でPiの最大値によって異なります。

Pearが各問い合わせに必要な最小時間を計算するのを手伝ってもらえますか?ここでの問い合わせは独立しています。つまり、前回の問い合わせの修理計画は実行されませんでした。

【入力形式】
1行目の正3つの整数N、M、Qは、タイトルにあるような意味を持っています。
次のM線では、各線に3つの正の整数Xi、Yi、Piがあり、XiとYiを結ぶ双方向の道路を示しており、Piの修復には時間がかかります。自己ループがあり、エッジが重い場合があります。1 <= Pi <= 1000000。

次の行Qでは、各行に4つの正の整数Li、Ri、Ki、Ciがあります。これは、今回問題のポイントが、Mod Ki = Ciの数値を持つ区間[Li、Ri]内のすべてのポイントであることを示します。問い合わせには少なくとも2つのポイントが含まれていることを確認してください。

【出力形式】
Q行を出力します。各行は正の整数で対応する問い合わせへの回答を表します。

【入力例】710
4
1 3 10
2 6 9
4 1 5
3 7 4
3 6 9
1 5 8
2 7 4
3 2 10
1 7 6
7 6 9
1 7 1 0
1 7 3 1
2 5 1 0
3 7 2 1

[サンプル出力]
9
6
8
8

[データ範囲]
20%データの場合、N、M、Q <= 30
40%データの場合、N、M、Q <= 2000
100%データの場合、N <= 50000、M <= 2 * 10 ^ 5、Q <=50000。Pi<= 10 ^6。Li、Ri、Kiはすべて[1、N]の範囲にあり、Ciは[0、Kiに対応)の範囲にあります。
トピック分析
トピックコード



おすすめ

転載: blog.csdn.net/kiwi_berrys/article/details/111462618