0011 Drawing Lots
#include<stdio.h>
#include <algorithm>
int main(){
int d[32],w,h,i,l,R;
scanf("%d %d",&w,&h);
for(i=1;i<=w;i++){
d[i]=i;
}
for(i=0;i<h;i++){
scanf("%d,%d",&l,&R);
std::swap(d[l],d[R]);
}
for(int i=1;i<=w;i++){
printf("%d\n",d[i]);
}
}
0012 A Point in a Triangle
三角形ABCと点Pの座標が与えられます。
点pが三角形の中にあればYESでないならNOと出力するという問題です。
ベクトルで解きます。
→AP=t(→AB)+s(→AC)。 →はベクトルを表します。
この式が0<=t<=1 && 0<=s<=1 && s+t<=1なら点pは三角形の中にあります。
この事実を使って高校数学の教科書通り素直に実装しましょう。
#include<stdio.h>
bool inDelta(double xs[3],double ys[3],double x,double y){
double x1,x2,x3,y1,y2,y3,k,s,t,u;
x1=xs[1]-xs[0];
y1=ys[1]-ys[0];
x2=xs[2]-xs[0];
y2=ys[2]-ys[0];
x3=x-xs[0];
y3=y-ys[0];
k=(x1*y2-x2*y1);
if(k==0){
return false;
}
s=(y2*x3-x2*y3)/k;
t=(x1*y3-y1*x3)/k;
u=s+t;
if(s<=0.0 || 1.0<=s || t<=0.0 || 1.0<=t || u<=0.0 || 1.0<=u){
return false;
}else{
return true;
}
}
int main(){
double xs[3],ys[3],x,y;
while(scanf("%lf %lf %lf %lf %lf %lf %lf %lf",&xs[0],&ys[0],&xs[1],&ys[1],&xs[2],&ys[2],&x,&y)!=EOF){
if(inDelta(xs,ys,x,y)==true){
printf("YES\n");
}else{
printf("NO\n");
}
}
}
0013 Switching Railroad Cars
#include<stdio.h>
#include<stack>
int main(){
std::stack<int> s;
int l;
while(scanf("%d",&l)!=EOF){
if(l==0){
printf("%d\n",s.top());
s.pop();
}else{
s.push(l);
}
}
}
0014 Integral
#include<stdio.h>
int main(){
int n,s,w;
while(scanf("%d",&w)!=EOF){
s=0;
for(int j=w;j<600;j+=w){
s+=j*j*w;
}
printf("%d\n",s);
}
}
0015 National Budget
80桁以内の2数a,bが与えられます。
2数の和が80ケタいないならその和を、80桁以上ならNAと出力する問題です。
a,bともに一桁ずつ右づめで文字列として数値を確保し、a+bを下の桁から小学校で習った筆算と同じ手法で計算してa+bを計算します。
#include<string.h>
#include <iostream>
#include <algorithm>
void re(std::string& s){
int l=s.size(),m=l/2;
for(int i=0;i<m;i++){
std::swap(s[l-i-1],s[i]);
}
}
int main(){
std::string s1,s2,s3;
int n,m,u,s;
char l,t;
std::cin>>n;
for(int i=0;i<n;i++){
std::cin>>s1>>s2;
s3="";
m=s1.size()>s2.size()?s1.size():s2.size();
if(m>80){
std::cout<<"overflow\n";
continue;
}
re(s1);
re(s2);
s1.append(m-s1.size(),'0');
s2.append(m-s2.size(),'0');
l=0;
for(int i=0;i<m;i++){
s=(s1[i]-'0')+(s2[i]-'0')+l;
l=s/10;
t=s%10;
s3.append(1,(char)(t+'0'));
}
if(l!=0) s3.append(1,(char)(l+'0'));
if(s3.size()>80){
std::cout<<"overflow\n";
continue;
}
re(s3);
std::cout<<s3<<"\n";
}
}
0016 Treasure Hunt
#include<stdio.h>
#include<math.h>
int main(){
int r,n,nowR=90;
double x=0,y=0,tr;
scanf("%d,%d",&n,&r);
while(r!=0 || n!=0){
tr=nowR/180.0*M_PI;
x+=n*cos(tr);
y+=n*sin(tr);
nowR=(nowR-r+360)%360;
scanf("%d,%d",&n,&r);
}
printf("%d\n%d\n",(int)x,(int)y);
}
0017 Caesar Cipher
#include<stdio.h>
#include<string>
int main(){
char c[81];
std::string t;
while(scanf("%[^\n]%*c",c)!=EOF){
t=c;
for(int i=0;i<27;i++){
for(int j=0;j<t.size();j++){
if('a'<=t[j] && t[j]<='z'){
t[j]=(t[j]-'a'+1)%26+'a';
}
}
if(t.find("the")!=-1 || t.find("this")!=-1 || t.find("that")!=-1){
printf("%s\n",t.c_str());
break;
}
}
}
}
0018 Sorting Five Numbers
#include<stdio.h>
#include <algorithm>
int main(){
int a[5];
for(int i=0;i<5;i++){
scanf("%d",&a[i]);
}
std::sort(a,a+5);
printf("%d %d %d %d %d\n",a[4],a[3],a[2],a[1],a[0]);
}
0019 Factorial
#include <stdio.h>
int main(){
long long int t=1;
int n,i;
scanf("%d",&n);
for(i=2;i<=n;i++){
t*=i;
}
printf("%llu\n",t);
}
0020 Capitalize
#include <stdio.h>
int main()
{
int n;
while(~(n = getchar()))
putchar(96<n&&n<123?n-32:n);
return 0;
}
最終更新:2011年08月21日 17:43