今年初の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 件のコメント:
コメントを投稿