見出し画像

ABC188 参戦記録 p.38

itsukiです。
AtCoder Beginner Contest 188 に参戦した様子です。解説記事ではありません。

結果は A, B, C の 3完でした。
回答時間合計:26分45秒
パフォーマンス:662

考察の流れ

A - Three-Point Shot

「負けている側 + 3」の方が、「勝っている側」よりも大きい場合に Yes
もうちょっと格好良く書けないかな?と一瞬迷ったけど、とりあえず解くことに集中…
#include <stdio.h>
#define Yes()       printf("Yes\n")
#define No()        printf("No\n")
int main(){
   int x,y;
   scanf("%d%d",&x,&y);
   if( x>y ){
       if( x < y+3 ){ Yes(); }
       else         { No();  }
   }
   else{
       if( y < x+3 ){ Yes(); }
       else         { No();  }
   }
   return 0;
}

コンテスト後:
・どちらが負けているかを考える必要はなかったです
・あとで短く書き直しました

#include <stdio.h>
int main(){
   int x,y;
   scanf("%d%d",&x,&y);
   if( abs(x-y) < 3 ){ printf("Yes\n"); }
   else              { printf("No\n");  }
   return 0;
}

B - Orthogonality

「ベクトル」「内積」という文字を見て怯む
O(N) で間に合いそうなので、問題文をそのまま書く
#include <stdio.h>
#define Yes()       printf("Yes\n")
#define No()        printf("No\n")
typedef long long ll;
int main(){
   int n,a[100005]={0},b[100005]={0};
   ll sum=0;
   scanf("%d",&n);
   for(int i=0; i<n; i++){ scanf("%d",&a[i]); }
   for(int i=0; i<n; i++){ scanf("%d",&b[i]); }
   for(int i=0; i<n; i++){
       sum += (a[i]*b[i]);
   }
       
   if( sum==0 ){ Yes(); }
   else        { No();  }
   return 0;
}

C - ABC Tournament

「2^N」を見て bit全探索?と思ったが違う
「完全二分木」を見てグラフ?と思ったが解ける気がしない
入力例3 を紙に書いてみる
左半分と右半分 それぞれの最大値が準決勝に進むので、min( 左半分の最大値, 右半分の最大値 ) で良さそう
#include <stdio.h>
#include <math.h>
#define MAX(x,y)	((x)>(y)?(x):(y))
#define MIN(x,y)	((x)<(y)?(x):(y))
int main(){
   int n,a,max1=0,max2=0,ans1,ans2;
   scanf("%d",&n);
   for(int i=0; i<(int)pow(2,n)/2; i++){
       scanf("%d",&a);
       if( max1 < a ){
           max1 = a;
           ans1 = i+1;
       }
   }
   for(int i=(int)pow(2,n)/2; i<(int)pow(2,n); i++){
       scanf("%d",&a);
       if( max2 < a ){
           max2 = a;
           ans2 = i+1;
       }
   }
   if( max1 < max2 ){ printf("%d\n",ans1); }
   else             { printf("%d\n",ans2); }
   return 0;
}

まとめ

・前回ボロボロだったのもあり、Highest更新できてよかった
・コンテスト中の実装時間を短縮するために、簡潔に書く方法をパッと思いつけるようになりたい
・しばらくは A, B, C 3完 30分を切れるように頑張る

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

#参戦記録 #備忘録 #AtCoder #ABC188 #プログラミング #競プロ #C言語

いいなと思ったら応援しよう!