2013/01/29

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

今年初のCodeforcesです。ケアレスミスが痛かった。

A:やるだけ。

B:総和の計算をすると、(n-1)n(n+1)/6+nという公式が出てくるので、これを出力するだけなんですが、注意すべきはオーバーフロー。私、オーバーフローを考えるの忘れてました。

C:条件から、同一x座標/y座標の点は存在しないことがわかります。そして、x,y軸と45度をなす直線上においてやれば良いです。(0,0)は使えないので、右下がりの直線にしてやればOKです。

oxo--,684位/1882人(Official),1804点,レートは1547->1494、Round#141以来の緑落ちでした。問題はこちら

[A,AC (C)]

#include<stdio.h>

int main(void){
  int n;
  struct uniform{
    int h,a;
  } team[32];
  int i,j,k,count;
  scanf("%d",&n);
  for(i=0;i<n;i++) scanf("%d%d",&team[i].h,&team[i].a);

  count=0;
  for(i=0;i<n;i++){
    for(j=0;j<n;j++){
      if(i==j) continue;
      if(team[i].h==team[j].a) count++;
    }
  }
  printf("%d\n",count);
  return 0;
}




[B,ACに書き換えたもの (C)]

#include<stdio.h>

int main(void){
  unsigned long long n;
  unsigned int nn;
  scanf("%u",&nn);
  n=nn;
  printf("%u\n",(unsigned int)((n-1)*n*(n+1)/6+n));
  return 0;
}


[C,AC (C)]

#include<stdio.h>

#define MIN(x,y) (((x)<(y))?(x):(y))

int main(void){
  int i;
  int m,n,mins;

  scanf("%d%d",&n,&m);
  printf("%d\n",mins=MIN(m,n)+1);

  for(i=0;i<mins;i++) printf("%d %d\n",i,m-i);
  return 0;
}
 

0 件のコメント:

コメントを投稿