2021年ブルーブリッジカップ省試合c++B組


2021年ブルーブリッジカップ省試合c++B組部分解答解析後更新
问题A:空间本题総分:5分【问题说明】小蓝は256 MBのメモリ空间で配列を开くつもりです.配列の各要素は32ビットのバイナリ整数です.プログラムが占有する空间とメモリを维持するのに必要な补助空间を考えなければ、256 MBの空间に32ビットのバイナリ整数をいくつ保存できますか?【答えの提出】結果が空欄になった問題で、結果を算出して提出すればいいだけです.本題の結果は1つの整数で、解答を提出する時にこの整数だけを記入して、余分な内容を記入して得点することができません.
32ビット=4 B 1 MB=1024 KB=1024 Bだから答えは:25610241024/4=67108864
試験問題B:カード本題総得点:5分【問題説明】青ちゃんはたくさんのデジタルカードを持っていて、どのカードにも0から9の数字がついています.青ちゃんはこれらのカードで数をつづるつもりです.彼は1から正の整数をつづりたいと思っています.つづりごとに保存して、カードは他の数をつづることができません.藍ちゃんは自分が1からどれだけ頑張ることができるか知りたいです.例えば、青ちゃんが30枚のカードを持っていて、そのうち0~9が3枚ずつあれば、青ちゃんは1~10をつづることができるが、11をつづるとカード1はもう1枚しかなく、11をつづるには足りない.今、青ちゃんの手には0から9までのカードが2021枚ずつあります.合計20210枚ですが、青ちゃんは1からいくらまでつづることができますか?ヒント:コンピュータプログラミングを使用して問題を解決することをお勧めします.【答えの提出】結果が空欄になった問題で、結果を算出して提出すればいいだけです.本題の結果は1つの整数で、解答を提出する時にこの整数だけを記入して、余分な内容を記入して得点することができません.
#include"iostream"
using namespace std;

int sum(int a,int b)
{
     
	int ans1=0,k;
	while(a)
	{
     
		k=a%10;
		if(k==b)
		ans1++;
		a=a/10;
	}
	return ans1;
}
int main()
{
     
	int pai[10]={
     2021,2021,2021,2021,2021,2021,2021,2021,2021,2021};
	int aa=0,i,j;
	for(i=1;;i++)
	{
     
		for(j=0;j<10;j++)
		{
     
			pai[j]=pai[j]-sum(i,j);
			if(pai[j]<0)
			{
     
				aa++;
				break;
			}
		}
		if(aa==1)
		break;
	}
	cout<<i-1;
	return 0;
}

試験問題D:貨物配置本題総点:10分【問題説明】小藍には大きな倉庫があり、多くの貨物を置くことができる.現在、青ちゃんはn箱の貨物を倉庫に置く必要があります.各箱の貨物は規則的な正方形です.青ちゃんは長さ、幅、高さの3つの互いに垂直な方向を規定して、1箱の貨物の辺はすべて厳格に長さ、幅、高さに平行しなければなりません.青ちゃんはすべての貨物が最終的に大きな立方体になることを望んでいます.すなわち、L、w、Hの貨物を長さ、幅、高さの方向にそれぞれ積み上げ、n-Lを満たす×W×H. nを与えて、どれだけの種類の荷物を積む方案が要求を満たしますかをお聞きします.例えば、n=4の場合、以下の6つのスキームがある:1×1×4、1×2×2、1×4×1、2×1×2、2×2×1、4×1×1. すみません、n=2021041820210418(16桁の数字があることに注意)では、全部で何種類の案がありますか?ヒント:コンピュータプログラミングを使用して問題を解決することをお勧めします.【答えの提出】結果が空欄になった問題で、結果を算出して提出すればいいだけです.本題の結果は1つの整数で、解答を提出する時にこの整数だけを記入して、余分な内容を記入して得点することができません.
#include"stdio.h"
int main() 
{
     
	int ans1=0,ans2=0;
	long long a=2021041820210418,b=126433,c=44955999,i,j,k,lop,min,max;
	for(i=1;i<b;i++)
	{
     
		if(a%i!=0)
		continue;
		for(j=i;j<c;j++)
		{
     
			k=a/i/j;
			lop=k*j*i;
			if(lop!=a)
			continue;
			
			if(k>j)
			{
     
				if(i!=j && j!=k && i!=k)
			    {
     
			    	ans1++;
			    	printf("%lld %lld %lld %d %d
"
,i,j,k,ans1,ans2); continue; } else { ans2++; printf("%lld %lld %lld %d %d
"
,i,j,k,ans1,ans2); } } } } printf("%d",ans1*6+ans2*3); return 0; }

試験問題C:直線本題総点:10分【問題説明】平面直角座標系では、2点で1本の直線を決定することができる.複数の点が1つの直線上にある場合、これらの点のいずれかの2点で決定された直線は同じです.与えられた平面上の2×3つの整点{(x,y)|0≦x<2,0≦y<3,x∈Z,y EZ)、すなわち横座標が0から1(0と1を含む)の間の整数、縦座標が0から2(0と2を含む)の間の整数の点である.これらの点は合計11本の異なる直線を決定する.所与の平面上の20×21個の整点{(x.y)|0≦x<20,0≦y<21,x EZ,y EZ}、すなわち横座標が0から19(0と19を含む)の間の整数、縦座標が0から20(0と20を含む)の間の整数の点である.すみません、これらの点は全部で何本の異なる直線を確定しましたか?【答えの提出】結果が空欄になった問題で、結果を算出して提出すればいいだけです.本題の結果は1つの整数で、解答を提出する時にこの整数だけを記入して、余分な内容を記入して得点することができません.
#include"iostream"
#include"set"
using namespace std;
set<pair<double,double> > line_set;

typedef struct
{
     
    int x;
    int y;
} Dian;

int main()
{
     
    int x1,y1,x2,y2;
    for(x1=0;x1<20;x1++)
	{
     
        for(y1=0;y1<21;y1++)
		{
     
            for(x2=0;x2<20;x2++)
			{
     
                for(y2=0;y2<21;y2++)
				{
     
                    if(x1!=x2&&y1!=y2)
					{
     
                        double k=(y2-y1)*1.0/(x2-x1);
                        double b=(y2*(x2-x1)-(y2-y1)*x2)*1.0/(x2-x1);
                        pair<double ,double> newline;
                        newline.first=k;
                        newline.second=b;
                        line_set.insert(newline);
                    }
                }
            }
        }
    }
    cout<<line_set.size()+20+21;
    return 0;
}

試験問題F:時間表示
時間制限:1.0 sメモリ制限:256.0 MB本題総得点:15分【問題説明】
藍ちゃんは友達と協力して時間表示のサイトを開発します.サーバでは、友人が現在の時間を取得し、1970年1月1日00:00:00から現在の時刻までのミリ秒数の整数で表されます.これで、ブルーちゃんはクライアントにこの時間を表示します.小青は年月日を表示する必要はなく、時間分秒を表示するだけでいいし、ミリ秒も表示しないで、直接捨てればいい.整数で表される時間を指定し、この時間に対応する時間を分秒で出力します.【入力形式】入力行には、時間を表す整数が含まれます.【出力フォーマット】出力時の分秒は現在の時間を表し、フォーマットはHH:MM:SSのようである.ここでHHは0から23、MMは分を表し、値はО59まで、SSは秒を表し、値はО59までです.時、分、秒が2桁未満の場合は先頭0を補う.
【サンプル入力1】46800999【サンプル出力1】13:00:00【サンプル入力2】1618708103123【サンプル出力2】01:08:23【評価例規模と約定】すべての評価例について、与えられた時間は1018を超えない正の整数である.
#include
#include
using namespace std;
typedef long long LL;

int main()
{
     
    LL n;
    cin>>n;
    n/=1000;
    int h=n/3600%24;
    n=n%3600;
    int m=n/60%60;
    n=n%60;
    int s=n%60;
    printf("%02d:%02d:%02d",h,m,s);
    return 0;
}


後続の部分は更新され続けます.