公式

B - Split? 解説 by physics0523


C++での軽い実装方法を紹介します。
set<int> pln でピンが立っている列がどれかを管理しています。(C++ の set については cpprefjp - C++日本語リファレンス - set を参照)
set<int> は同一要素の重複を禁じるので、 set<int> に含まれる最小要素を \(m\) 、最大要素を \(M\) としたとき、( set<int> の大きさ) = \(M-m+1\) が成り立つことと set<int> の中身が \(\{ m,m+1,\dots,M \}\) であることとは同値です。

#include<bits/stdc++.h>

using namespace std;

int main(){
  string s;
  cin >> s;
  if(s[0]=='1'){cout << "No\n";return 0;}
  vector<int> line={4,3,5,2,4,6,1,3,5,7};
  set<int> pln;
  for(int i=0;i<10;i++){
    if(s[i]=='1'){pln.insert(line[i]);}
  }
  if(pln.empty()){cout << "No\n";return 0;}
  int mn=(*pln.begin()), mx=(*pln.rbegin());
  if(mx-mn+1 != pln.size()){cout << "Yes\n";}
  else{cout << "No\n";}
  return 0;
}

投稿日時:
最終更新: