2012年9月9日日曜日

AtCoderのarc007に出てみた

PCK惨敗した腹いせに参加。結局惨敗。ひどい。


A:入力文字列から壊れたキーを消せばおk。
#include<iostream>
using namespace std;
int main(void){
  char x;
  char str[60],ans[60];
  cin >> x;
  cin >> str;
  int j = 0;
  for(int i = 0; i < 50; i++){
    if(str[i] == '\0'){
      ans[j] = str[i];
      j++;
      break;
    }
    if(str[i] != x){
      ans[j] = str[i];
      j++;
    }
  }
  if(j == 0){
    cout << endl;
  }else{
    cout << ans << endl;
  }
  return 0;
}

ホントに実装下手か
string使いたかったけどなんかバグが取れなくて普通にchar型の配列使ってしまった。
これは終端文字のところがちょっとおかしくて2回ほどWA食らってしまった。

B:高橋君がCDをバラバラにしまったのでどのケースにどのCDがあるのかを列挙する
#include<iostream>
using namespace std;
int main(void){
  int n,m;
  int p,c[100],temp,d;
  cin >> n >> m;
  for(int i = 0; i < n; i++){
    c[i] = i + 1;
  }
  p = 0;
  for(int i = 0; i < m; i++){
    cin >> d;
    if(p == d)
      continue;
    for(int j = 0; j < n; j++){
      if(c[j] == d){
        temp = c[j];
        c[j] = p;
        p = temp;
      }
    }
  }
  for(int i = 0; i < n; i++){
    cout << c[i] << endl;
  }
  return 0;
}

仮想的にプレイヤーとCDケース用意すればおk

C:テレビの視聴パターンが○×で表示され、連続で視聴するための台数を返す。
よく分からなくて適当に書いたらダメだった。
#include<iostream>
#include<cstring>
using namespace std;

int main(void){
  char str[25],cac[15],chc[15];
  bool f = true;
  int ans = 0;
  cin >> str;
  int length = strlen(str);
  strcpy(cac,str);
  strcat(str,cac);
  
  for(int i = 0; i < length; i++){
    chc[i] = 'o';
  }
  strcat(chc,"\0");
  do{
    char buf[25];
    strcpy(buf,str);
    int chg = 0;
    for(int i = 0; i < length; i++){
      char buf2[25];
      strcpy(buf2,buf);
      int ibuf = 0;
      for(int j = i; j < length + i; j++){
        if(cac[j] == 'o' && buf2[j] == 'x'){
          buf2[j] = 'o';
          ibuf++;
        }
      }
      if(chg < ibuf){
        chg = ibuf;
        strcpy(str,buf2);
      }
    }
    if(strstr(str,chc) != NULL){
      f = false;
    }
    ans++;
  }while(f);
  cout << ans << endl;
  return 0;

}
自分でも何やってるかわからない。

というわけで初参加のarcは156位でした。次回は2ケタ目指す。

0 件のコメント:

コメントを投稿