2012/02/25

Codeforces Round #109(Div.2) 参戦記

お久しぶりです。

Round#101以来、およそ1ヶ月半ぶりに参加したCodeforcesです。いわゆるReadforcesだった気がする回でした。

A: 文法の練習問題という感じで、配列の最大と最小を求めるのとほとんど変わらない問題でした。6分でACとなり、488点をとりました。そしてこれが、今回の唯一の正解です。

B: はじめて出したときには配列の初期化を忘れており、それから2度再提出して、無事にpretest passed...だったのですが、ランタイムエラー(test 19)によって結局ダメでした。

D: 言えることが何もありません。提出して、Pretestに通って、ハックされただけでした。

ox-x-,1005位/1683人,488点,レートは1578->1501でした。辛うじて青にとどまれました…。

[A,AC (C)]

#include<stdio.h>

int main(void){
  int nowmax,nowmin,count=0,n,input;
  scanf("%d",&n);
  scanf("%d",&input);
  nowmax=nowmin=input;
  while(--n){
    scanf("%d",&input);
    if(nowmax<input){
      nowmax=input;
      count++;
    }else if(nowmin>input){
      nowmin=input;
      count++;
    }
  }
  printf("%d\n",count);
  return 0;
}


[B,RE (C)]

#include<stdio.h>
#include<stdlib.h>

int comp(const void *p1, const void *p2) {
  int n1, n2;
  n1 = *((const int *)p1);
  n2 = *((const int *)p2);
  return n2 - n1;
}

int main(void){
  unsigned int count=1,a,b,n,i=0,j,point=0;
  int num[1000];

  for(i=0;i<1000;i++) num[i]=0;

  i=0;

  scanf("%u",&n);
  while(n--){
    scanf("%u %u",&a,&b);
    if(b){
      count+=b-1;
      point+=a;
    }else{
      num[i++]=a;
    }
  }
  if(i!=0){
    qsort(num,sizeof(int)*i,sizeof(int),comp);
    for(j=0;j<count && j<i;j++) point+=num[j];
  }
  printf("%u\n",point);
  return 0;
}



[D,TLE (Hacked,C)]

#include<stdio.h>
#include<stdlib.h>

int rel_prime(int m,int n){
  if(n!=0) return rel_prime(n,m%n);
  else return m==1;
}

int main(void){
  int list[100000];
  int nowlist=0,m,n,i,j,k,flg;
  char *onoff;
  char in;
  int input;

  scanf("%d%*c%d%*c",&n,&m);
  onoff=(char *)calloc(n,sizeof(char));
  onoff--;
  while(m--){
    scanf("%c%*c%d%*c",&in,&input);
    if(in=='-'){
      if(onoff[input]){
for(i=0;i<nowlist;i++){
  if(list[i]!=input) continue;
  list[i]=0;
  onoff[input]=0;
  break;
}
puts("Success");
      }else{
puts("Already off");
      }
    }else if(in=='+'){
      if(onoff[input]){
puts("Already on");
      }else{
flg=1;
for(i=0;i<nowlist;i++){
  if(list[i]==0) continue;
  if((flg=rel_prime(input,list[i]))==0) break;
}
if(flg){
  onoff[input]=1;
  list[nowlist++]=input;
  puts("Success");
}else{
  printf("Conflict with %d\n",list[i]);
}
      }
    }
  }
  free(onoff+1);
  return 0;
}

0 件のコメント:

コメントを投稿