2011/07/23

Codeforces Beta Round #78(Div.2) 参戦記

(この記事はあくまで参戦記であり、解説ではありません。趣旨をご理解の上お読みください。)
今回は適度な出来でした。自分の実力ではこれぐらいが妥当かな、という点でした。


A: 誤読1回・単純なコーディングミス1回・タイプミス2回とさんざんミスに泣かされた問題でした。23分に254点という酷い出来。

B: 一方でこちらは一発で通り、36分で856点。最初にこっちをやっておけばよかったのですが、後の祭り。

C: 63分にPretest Passedでしたが、ハックされてしまいました。自分の数学的考察に地震がなかったので、調べてみて、ここにたどりつきました。これを使って解いて、107分に808点。ですが、システムテストで引っかかってしまいました。書き間違いでした。残念です。

DとEも読みましたが、私には少々難しすぎました。ただ、Dは面白そうなので、Editrialを読んでみたいとも思いました。

結局,、1110点で、323位/1219人でした。私の出来ならこれぐらいで及第、というところでしょうか。もっと練習をしようという気になる出来でした。
A.ミスが多かったです。
#include<stdio.h>
#include<string.h>

int main(void){
  char str[1024];
  int i,j,k;
  fgets(str,sizeof(str)/sizeof(char),stdin);
  for(i=0;i<strlen(str);i++){
    if(str[i]=='.'){
      if(str[i-1]=='9'){
puts("GOTO Vasilisa.");
return 0;
      }
      if(str[i+1]>='5'){
  str[i-1]++;
      }
      for(j=0;j<i;j++) putchar(str[j]);
      putchar('\n');
      return 0;
    }
  }
}

B.これは比較的簡単に解けました。
#include<stdio.h>

int sum(int array[],int size){
  int sum=0,i;
  for(i=0;i<size;i++) sum+=array[i];
  return sum;
}
int main(void){
  int cup[1000];
  int n;
  int ave;
  int i,j,k;
  int count=0;
  
  scanf("%u",&n);
  for(i=0;i<n;i++) scanf("%d",&cup[i]);
  ave=sum(cup,n);
  if(ave%n!=0){
    puts("Unrecoverable configuration.");
    return 0;
  }
  ave/=n;
  for(i=0;i<n;i++) cup[i]-=ave;
  for(i=0;i<n;i++) count+=(cup[i]!=0);
  if(count==0){
    puts("Exemplary pages.");
    return 0;
  }else if(count!=2){
    puts("Unrecoverable configuration.");
    return 0;
  }else{
    for(i=0;i<n;i++){
      if(cup[i]<0){
j=i;
count--;
      }else if(cup[i]>0){
k=i;
count--;
      }
      if(count==0) break;
    }
    printf("%d ml. from cup #%d to cup #%d.\n",cup[k],j+1,k+1);
  }
  return 0;
}


C.上に書いたサイトをもっと早く見つけられていれば、もっと早く解けたのですが…惜しいことをしました。
#include<stdio.h>

int main(void){
  int color[6],i,kosu[7];
  char str[8];
  fgets(str,sizeof(str),stdin);
  for(i=0;i<6;i++) color[i]=0;
  for(i=0;i<6;i++){
    switch(str[i]){
    case 'R':
      color[0]++;
      break;
    case 'O':
      color[1]++;
      break;
    case 'Y':
      color[2]++;
      break;
    case 'G':
      color[3]++;
      break;
    case 'B':
      color[4]++;
      break;
    case 'V':
      color[5]++;
      break;
    }
  }
  for(i=0;i<7;i++) kosu[i]=0;
  for(i=0;i<6;i++) kosu[color[i]]++;
  
  if(kosu[6]==1 || kosu[5]==1){
    puts("1");
  }else if(kosu[4]==1 || kosu[3]==2){
    puts("2");
  }else if(kosu[3]==1){
    puts("5");
  }else if(kosu[2]==3){
    puts("6");
  }else if(kosu[2]==2){
    puts("8");
  }else if(kosu[2]==1){
    puts("15");
  }else{
    puts("30");
  }
  return 0;
}

0 件のコメント:

コメントを投稿