0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

#2 プログラミング初心者の理系大学生がAtcoderに挑戦してみた[ABC-267]

Posted at

では前回に引き続きAtcoderのBeginerコンテストの267の解説をやる。
※このシリーズはわたしのプログラミング技術向上のためのアウトプットに過ぎないため知識不足、説明下手に関しては悪しからず。

1.ABC267

わざわざ解説するまでもない条件分岐の問題である。注意点は英語のスペルのタイプミスによってWAとならないようにすることくらいだ。

#include <bits/stdc++.h>
using namespace std;
int main(void)
{
	string S;
	cin >> S;

	if (S == "Monday") cout << 5 << endl;
	if (S == "Tuesday") cout << 4 << endl;
	if (S == "Wednesday") cout << 3 << endl;
	if (S == "Thursday") cout << 2 << endl;
	if (S == "Friday") cout << 1 << endl;


	return 0;
}

ただこれだけの話である。

2.ABC267-B

次はボウリングのスプリットに関する問題だ。
設定がややややこしいがまずは1ピンが倒れていることが絶対条件。それを満たしたうえで、少なくとも一本のピンが立っている2列の間にすべてのピンが倒れた列が少なくとも一つ存在すればスプリットになる。のピンが倒れているか否かの情報を列ごとに配列に格納し、ピックアップした2列の間にすべてのピンが倒れた列を見つける方針でプログラムを作成する。

#include <bits/stdc++.h>
using namespace std;

int main(){
  
  string s;
  
  for(int i=1; i<=10; i++) {
    cin >> s[i];
    
  }
 
    if (s[1] == '1') {
        cout << "No" << endl;
        return 0;
    }
    else {

    vector<int> a(7);
    
      for(int i=1; i<=7; i++) {
        a[i] = 0;}
      
        if(s[7] == '1') a[1]=1;
        if(s[4] == '1') a[2]=1;
        if((s[2] == '1') or (s[8] == '1')) a[3]=1;
        if((s[5] == '1') or (s[1] == '1')) a[4]=1;
        if((s[9] == '1') or (s[3] == '1')) a[5]=1;
        if((s[6] == '1')) a[6]=1;
        if(s[10] == '1') a[7]=1;


        for (int i = 1; i <= 7; i++) {
            for (int j = 1; j < i; j++) {
                if (a[i] == 1 and a[j] == 1) {
                    for (int k = j + 1; k < i; k++) {
                        if (a[k] == 0) {
                            cout << "Yes" << endl;
                            return 0;
                        }
                    }
                }
            }
        }
    }

    cout << "No" << endl;
  
  
    
    
  return 0;
}

まずピンが倒れているか否かの情報を配列に入力し、ピン1が倒れていない時点でスプリットではないため除外。
そして各縦列に関して一つでも立っているピンが存在するのであれば配列の値を1とする(ただし配列の初期値は0)。その後は立つピンが存在するに列の間にすべてのピンが倒れている列が存在すれば、スプリットとなる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?