2019南海区青少年情報オリンピック(小学校グループA)

2019南海区青少年情報オリンピック(小学校グループA)

スコア:460ポイント、ファーストクラス500 (私はまだ上手すぎる)

要約:それは主に質問5の残念です(わずか20ポイント)

次回は、それを行う前に、自分の考えを明確にし、特定の方法について考える必要があります

(貪欲になるために何年にもわたって5つまたは6つの質問があったようです)

A.正方行列の印刷

タイトルの説明
次の正方行列は非常に規則的で、曲がりくねった正方形と呼ばれます。たとえば、3×3:

1 2 3

6 5 4

7 8 9

辺の長さが与えられたら、対応する曲がりくねった正方行列を出力します。

入力形式
整数n。これは、n×nの曲がりくねった正方行列、1≤n≤100を出力することを意味します。

出力形式は
n行で、各行はスペースで区切られたn個の整数です。

試料
サンプル入力1
4
サンプル出力1
1 2 3 4
5 6 7 8
9 10 11 12
16 15 14 13

直接的な暴力、詳細なし。

#include<iostream>
#include<fstream>
#include<algorithm>
#include<cmath>

using namespace std;

int n;

int main()
{
    
    
	 cin>>n;
	 for(int i=1;i<=n;i++)
	 {
    
    
	 	if(i%2==1)
	 	{
    
    
	 		for(int j=(i-1)*n+1;j<=i*n;j++)
	 		cout<<j<<" ";
	 		cout<<endl;
	 	}
	 	if(i%2==0)
	 	{
    
    
	 		for(int j=i*n;j>=(i-1)*n+1;j--)
	 		cout<<j<<" ";
	 		cout<<endl;
	 	}
	 }
    return 0;
}

B.分数の減算

タイトルの説明
一次数学
私たちは皆、そのような分数計算を知っています。2つの分数を引いた結果を計算するようにプログラムしてください。

入力形式
最初の行、2つの整数aとbは、分数abab、1≤a<b≤10000を表します。

2行目では、2つの整数cとdが分数cdcdを表し、1≤c<d≤10000です。

データを入力して、計算結果が正であることを確認します。

出力形式
結果を表す2つの整数。

注意:計算結果の端数はポイントを提供します。

サンプル
サンプル入力14
7
13
サンプル出力15
21

結果のオファーポイントに注意してください

#include<iostream>
#include<fstream>
#include<algorithm>
#include<cmath>

using namespace std;

int z1,m1,z2,m2,a1,a2,k;

int main()
{
    
    
     cin>>z1>>m1>>z2>>m2;
	 for(int i=1;i<=m1;i++)
	 {
    
    
	 	if(i*m2%m1==0)
	 	k=i*m2;
	 } //防止int炸(不加也没有关系)
	 z1=z1*(k/m1);
	 z2=z2*(k/m2);
	 a1=z1-z2;
	 a2=k;
	 int i=2;
	 while(i<=a1)
	 {
    
    
	 	if(a1%i==0&&a2%i==0)
	    a1=a1/i,a2=a2/i;
	    else
	    i++;
	 }//约分
     cout<<a1<<" "<<a2;

    return 0;
}

C.後方

トピックの説明
先生は黒板にN個の正の整数の行を書きました。先生は生徒が右から左に数字を暗唱して読み、合計を見つける能力をテストしたいと考えていました。たとえば、次の3つの整数が書き込まれます:123 4560。結果は次のとおりです:06 + 54 + 321 = 381

入力形式
最初の行、整数n、1≤n≤100。

2行目には、n個の正の整数があり、それぞれが1,000,000を超えていません。

出力形式
整数。

サンプル
サンプル入力1
3
123 45 60
サンプル出力1
381

文字列の方が便利です

#include<iostream>
#include<fstream>
#include<algorithm>
#include<string>
#include<cmath>//pow函数

using namespace std;

int n;
long long ans;
string s;

int main()
{
    
    
     cin>>n;
     for(int e=1;e<=n;e++)
     {
    
    
     	cin>>s;
     	for(int i=s.size()-1;i>=0;i--)
     	{
    
    
     		int d=s[i]-'0';
     		ans=ans+pow(10,i)*d;
     	}
     }
     cout<<ans;
    return 0;
}

D.セットの違い

タイトルの説明
AとBの2つのシリーズの番号があります。Aには表示されるがBには表示されない番号は、セットAとセットBの違い:ABと呼ばれます。例:A = {1,4,5,2,6}、B = {5,3,2,7}、次にAB = {1,4,6}。

ここで、2つのセットAとBを与え、ABにいくつの数があるかを調べます。

入力形式
最初の行、2つの整数naとnbは、セットAとセットBにある整数の数を示します。1≤na、nb≤10000。

2行目では、na個の異なる正の整数がセットAの数値を表しており、各正の整数は10000を超えていません。

3行目では、nb個の異なる正の整数がセットBの数値を表しており、各正の整数は10,000を超えません。

出力形式
整数、ABに含まれる数値の数。

試料
サンプル入力1
5 4
5 2 4 8 7
3 7 6 2
出力例1
3

データ範囲とヒント
サンプルの説明:
AB = {5,4,8}。

配列統計はタイムアウトせず、詳細もありません

#include<iostream>
#include<fstream>
#include<algorithm>
#include<string>
#include<cmath>

using namespace std;

int n,a[10005],b[10005],f,ans,m;

int main()
{
    
    
     cin>>n;
	 cin>>m;
     for(int i=1;i<=n;i++)
     {
    
    
     	cin>>f;
     	a[f]++;
     	ans++;
     }
     for(int i=1;i<=m;i++)
     {
    
    
     	cin>>f;
     	if(a[f]==1)
     	ans--;
     }
     cout<<ans;
     
    return 0;
}

E.表現可能な数字

タイトル説明
左から右にN個の整数が並んでいます。ある数がその前の2つの数の合計に等しい場合、この数は表現可能な数であると言われます。与えられたシーケンスのいくつの数を表すことができるか尋ねてください。

入力形式
最初の行である整数Nは、シーケンス内に存在する整数の数を示します(1≤N≤10000)。

2行目には、N個の正の整数があり、それぞれが10,000を超えません。

出力形式
整数、表現可能な数値がいくつあるか。

試料
サンプル入力1
8
5 2 2 3 4 8 7 16
のサンプル出力1
3

データ範囲とヒント
サンプルの説明:
4 = 2 + 2; 8 = 5 + 3; 7 = 3 +4。

Oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooもそれはそうだ、私はそれがあまりにも複雑だと思うので、多くの詳細があり、怒っ

元のコード:

#include<iostream>
#include<fstream>
#include<algorithm>
#include<string>
#include<cmath>

using namespace std;

int n,a[10005],f,ans;

int main()
{
    
    
     cin>>n;
     for(int i=1;i<=n;i++)
     {
    
    
     	cin>>f;
     	a[f]=i;
     }//这样只要一有重复的,数组就会被覆盖掉
     for(int i=1;i<=10000;i++)
     {
    
    
     	for(int j=1;j<=10000;j++)
     	{
    
    
     		if(a[i]!=0&&a[j]!=0&&a[i+j]!=0&&a[i+j]!=-1)
     		{
    
    
     			if(a[i]<=a[i+j]&&a[j]<=a[i+j])
     			{
    
    
     			   ans++;	
     			   a[i+j]=-1;
     			}
     		}
     	}
     }//当时的逻辑好清奇,我到现在也想不通当时为什么要这样写……
     cout<<ans;
    return 0;
}

ACコード:

#include<iostream>
#include<fstream>
#include<algorithm>
#include<string>
#include<cmath>

using namespace std;

int n,a[10005],c[20005],ans;

int main()
{
    
    
     cin>>n;
     for(int i=1;i<=n;i++)
     	cin>>a[i];
     for(int i=1;i<=n;i++)
     {
    
    
     	for(int j=1;j<=i-1;j++)//往前找,保证是前面两个
     	{
    
    
            c[a[i]+a[j]]=1;//防止出现多个加起来相同的数
     	}
		 ans=ans+c[a[i]];//如果有相同的数字,那它也会++,妙哉
     }//我觉得有点类似素数筛法
     cout<<ans;
    return 0;
}

とても怒っています〜

F.積み上げ羅漢

タイトル説明
農場のN頭の牛は、羅漢を積み重ねるゲームをするのが好きです。つまり、数頭の牛、1頭の牛の後に1頭の牛が柱の形で立っています。ただし、牛の強さは異なります。Ciの値を使用して、i番目の牛に最大で何頭の牛が立つことができるかを示し、少なくとも柱の形で何頭の牛が立つことができるかを尋ねます。

入力形式:
最初の行、1つの整数N、牛の数を示し、1≤N≤1000。

2行目のN個の正の整数Ciは、これらの牛の力、0≤Ci≤1000を表します。

出力形式:
整数。これは、少なくとも複数の「羅漢」を意味します。

サンプル
入力サンプル:
5
0 2 1 2 2
出力サンプル:
2

データ範囲とリマインダー
サンプルの説明:
1頭目、3頭目、2頭目の牛は上から下
に積み重ねることができ、4頭目と5頭目の牛は積み重ねることができます。

#実際、それは貪欲です。私も試験中にそれを考えましたが、方法は複雑すぎます(正しく行うのは良いことですが、問題は正しくありません!)。

大きなものから小さなものまで、基本的な考え方。(基本的には考えられますが)
でも同じならどうやってまとめたらいいのでしょうか?
入れたら少し遅れて負けてしまいます入れ
ないと最後に答えないと間違ってしまいます(試験に巻き込まれました)

だから、それを続けるという問題について考えないでください、ただ小さいものから大きいものまで始めて、上から下に積み重ねて、あなたができるところにそれを置いて、そしてあなたができることは何でもしてください:D(このトリックは偉大な神によって考えられました、それはとても強力です、崇拝)

ACコード:

#include<iostream>
#include<fstream>
#include<algorithm>
#include<string>
#include<cmath>

using namespace std;

int n,f,ans,c[10005],k,d;

int main()
{
    
    
    //freopen("638.in","r",stdin);
	//freopen("638.out","w",stdout);
	 cin>>n;
	 for(int i=1;i<=n;i++)
	 {
    
    
	 	cin>>f;
	 	c[f]++; 
	 }
	while(k<n)
	{
    
    
		d=0;//要承受多少只
		ans++;
		for(int i=0;i<=1000;)//注意0
	    {
    
    
		    if(c[i]!=0&&i>=d)
		    {
    
    
		    	c[i]--;//考虑多只奶牛f相同
		    	k++;
		    	d++;
			}
			else
			i++;
	    }
	}
	cout<<ans;
	
    return 0;
}

ε=(´ο` *)))今回のテストはとても悪いです

おすすめ

転載: blog.csdn.net/yyh0910/article/details/115056373