問31 Weight
解法
2^nで考えたらnのビットがたってるものだけ出力。
あとはn/2で割ったあとnが0でないならまだのせるものがあるのでスペースを出力。
#include<stdio.h>
int main(){
int n;
while(scanf("%d",&n)!=EOF){
int a=1;
while(n!=0){
if(n%2==1){
printf("%d",a);
n/=2;
if(n>0)printf(" ");
}else{
n/=2;
}
a*=2;
}
printf("\n");
}
}
問32 Plastic Board
解法
長方形なら3平方が成り立ち成り立たないなら、ひし形の可能性しかない。
ひし形なら隣り合う2辺は同じ長さ。
そうでないならひし形でもない。
#include<stdio.h>
int main(){
int a,b,c,ans1=0,ans2=0;
while(scanf("%d,%d,%d",&a,&b,&c)!=EOF){
if(a*a+b*b==c*c){
ans1++;
}else if(a==b){
ans2++;
}
}
printf("%d\n%d\n",ans1,ans2);
}
問33 Ball
解法
優先して左に入れる、入らなければ右に入らないか試す。
両方駄目ならどうやっても入らない。
それだけ、計算量は一回のボールセットで10。
#include<stdio.h>
int main(){
int n,l,r,b;
scanf("%d",&n);
while(n--){
l=r=0;//左のほうが常に大きくなるようにする入らなければ右
bool ok=true;
for(int i=0;i<10;i++){
scanf("%d",&b);
if(l<b){
l=b;
}else if(r<b){
r=b;
}else{
ok=false;
}
}
printf("%s\n",ok?"YES":"NO");
}
}
問34 Railway Lines
#include<stdio.h>
int main(){
double Ls[11],L,v1,v2;
while(1){
Ls[0]=0;
if(scanf("%lf,",&Ls[1])==EOF)break;
for(int i=2;i<11;i++){
scanf("%lf,",&L);
Ls[i]=Ls[i-1]+L;
}
scanf("%lf,%lf",&v1,&v2);
double p=v1*Ls[10]/(v1+v2);
int ans=0;
for(int i=0;i<11;i++){
if(p<=Ls[i]){
ans=i;
break;
}
}
printf("%d\n",ans);
}
}
問35 Is it Convex?
#include<stdio.h>
int main(){
double xs[4],ys[4];
while(1){
if(scanf("%lf,%lf",&xs[0],&ys[0])==EOF)break;
for(int i=1;i<4;i++){
scanf(",%lf,%lf",&xs[i],&ys[i]);
}
int count=0;
for(int i=0;i<4;i++){
int p1=i;
int p2=(i+1)%4;
int p3=(i+2)%4;
double dx2,dy2,dx3,dy3;
dx2=xs[p2]-xs[p1];
dy2=ys[p2]-ys[p1];
dx3=xs[p3]-xs[p1];
dy3=ys[p3]-ys[p1];
count+=(dx2*dy3-dx3*dy2>0?1:-1);
}
printf("%s\n",count==4||count==-4?"YES":"NO");
}
}
最終更新:2014年01月28日 09:33