見出し画像

HHKB プログラミングコンテスト 2020 参戦記録 p.20

itsukiです。
HHKB プログラミングコンテスト 2020 に参戦した様子です。解説記事ではありません。

結果は A, B, C の 3完でした。

考察の流れ

A. Keyboard

小文字 -> 大文字にするために、ASCIIコード表検索をして時間ロス
なんで何も出力されない!?と思ったら入力し忘れていた…
#include <stdio.h>
int main(){
   char s[2]={0}, t[2]={0};
 	scanf("%s%s",s,t);
   if( s[0]=='Y' ){
       printf("%c\n",t[0]-32);
   }else{
       printf("%c\n",t[0]);
   }
   return 0;
}

コンテスト後:

「32 を xor することで大文字小文字が切り替わる」という解説をみて衝撃を受ける

B. Futon

最近解いた ABC096-C に少し似ている
S_i == "." のとき、上下左右のマスを調べて "." であればカウント
布団のサイズは 2 マスなので、一方のマスから見た場合ともう一方のマスから見た場合とで、2重カウントしてしまうため最後 2 で割る

画像1

入力例1 :
○と△の位置に布団を敷くことを考えると、
S_i==○ からみた場合と S_i==△ から見た場合は同じ敷き方になる
#include <stdio.h>

char s[102][102]={0};

int check(int h, int w){
   if     ( h<0 || w<0 )   return 0;
   else if( s[h][w]=='.' ) return 1;
   else                    return 0;
}

int main(){
   int h,w,cnt=0;
   scanf("%d%d",&h,&w);
   for(int i=0; i<h; i++){ scanf("%s", s[i]); }

   for(int i=0; i<h; i++){
       for(int j=0; j<w; j++){
           if( s[i][j]=='.' ){
               if( check(i-1,j) ){ cnt++; }    //上
               if( check(i+1,j) ){ cnt++; }    //下
               if( check(i,j-1) ){ cnt++; }    //左
               if( check(i,j+1) ){ cnt++; }    //右
           }
       }
   }
   printf("%d\n",cnt/2);
   return 0;
}

C. Neq Min

N <= 2*10^5 なので、O(N^2) だと間に合わない
現時点での最小値を常に保持することを考える
数列 p_i,…,p_N とは別に フラグ用の配列を用意し、
p_i として出現(=最小値候補から外れた)時点でフラグを立てる
現時点での最小値が p_i として出現してしまった場合、
フラグ用の配列内を検索して次の最小値候補を決める
p_i <= N と勘違いしていたため、コメント部分で WA
しかも p_i <= N だとしても WA になるコードだった…
何でもかんでも for文 で書かない!(自戒)
#include <stdio.h>
int main(){
   int n, p[200001]={0}, c[200001]={0}, min=0;
   scanf("%d",&n);
   for(int i=0; i<n; i++){
       scanf("%d", &p[i]);
       c[p[i]]++;
       if(min==p[i]){
//         for(int j=min; j<n; j++){
           for(int j=min; j<200001; j++){
               if( c[j]==0 ){ min=j; break; }
           }
       }
       printf("%d\n",min);
   }
   return 0;
}

D. Squares

たどり着けなかった様子(現時点で未AC)

画像2

まとめ

・つい最近 Grid を解いていたため、苦手意識が薄まっていたのが良かった
・本番でも計算量を落とせるようになったのが嬉しい
・とはいえ TLE しないか自信はなかった…計算量の見積精度を上げないと…
・他の方々のソースを見ると、もっと簡単に書いてあったので真似たい
・久々の茶パフォだった!

引き続き、のんびり精進します。

#note初心者 #備忘録 #参戦記録 #AtCoder #HHKB #プログラミング #競プロ #C言語 #数学 #Grid

この記事が気に入ったらサポートをしてみませんか?