The Fourth Dimension Space

枯叶北风寒,忽然年以残,念往昔,语默心酸。二十光阴无一物,韶光贱,寐难安; 不畏形影单,道途阻且慢,哪曲折,如渡飞湍。斩浪劈波酬壮志,同把酒,共言欢! -如梦令

#

POJ 2641 Billiard 简单的数学计算题(速度分解)

这道题目的意思是,给你一个长为a宽为b的球桌,现在给它一个初速度,使得它在若干次碰撞后回到初始位置(题目里默认为小桌的中心)
现在告诉你小球和垂直边碰撞的次数m,以及和水平边碰撞的次数n,还有整个过程的时间s,让你求出碰撞的初速度以及出球的角度;

列方程求解:
b*n=v*sin(θ)*s

a*m=v*cos(θ)*s



所以得到tan(θ)=(b*n)/(a*m);
可解出θ;

然后在代入原方程求解v即可;


#include<iostream>
#include
<cmath>
using namespace std;

const double Pi=3.141592653;

int main ()
{

    
double a,b,s,m,n;
    
while(scanf("%lf%lf%lf%lf%lf",&a,&b,&s,&m,&n))
    
{
        
if(a==0&&b==b&&s==0&&m==0&&n==0)
            
break;
        
double degree;
        
double resultdegree;
        degree
=atan(b*n/(a*m));
        resultdegree
=atan(b*n/(a*m))/Pi*180;
        
double v;
        v
=(b*n)/(sin(degree)*s);
        printf(
"%.2lf %.2lf\n",resultdegree,v);
    }

    system(
"pause");
    
return 0;
    
}

posted @ 2009-03-07 16:37 abilitytao 阅读(372) | 评论 (0)编辑 收藏

POJ 2619 Delta-wave 激起你思维的火花

这个题居然要用到三维坐标,太神奇了~
这个代码其实我也是借鉴网上牛人写的,感觉写的非常好,略作修改之后就拿过来了;
至于那个坐标公式,还有一小部分没有弄懂,下次可以继续研究下呵;


每个点都可以用三向坐标来表示
最短路径=两点各坐标差的绝对值之和决定的。用三向坐标
表示后,你会发现最短路径总是穿过3种线段,步数=各线段和=坐标差之和.有时侯把图转过几个角度或把元素分分类或掠取几条线都可能有新发现。


以上转自:http://hi.baidu.com/sunshine_0316/blog/item/834b3f39b58f3622b9998f6f.html


#include<iostream>
#include
<cmath>
#include
<cstdio>
#include
<algorithm>
using namespace std;

int main() 

    
int n1,n2; 
    
int i,alevel,aright,aleft,blevel,bright,bleft,steps; 

    scanf(
"%d%d",&n1,&n2);
    alevel
=1
    blevel
=1
    
for(i=1;;i=i+2
    

        
if(n1-i<=0
        

            aright
=(i-n1)/2+1
            aleft
=(n1+1)/2
            
break
        }
 
        alevel
++
        n1
=n1-i; 
    }
 
    
for(i=1;;i=i+2
    

        
if(n2-i<=0
        

            bright
=(i-n2)/2+1
            bleft
=(n2+1)/2
            
break
        }
 
        blevel
++
        n2
=n2-i; 
    }

    steps
=abs(alevel-blevel)+abs(aleft-bleft)+abs(aright-bright);
    printf(
"%d\n",steps); 

    
return 0;
}

posted @ 2009-03-07 01:10 abilitytao 阅读(333) | 评论 (0)编辑 收藏

POJ 2603-Brave balloonists 求BigInt的最大公约数(用数论知识解决)

原来这道题用数论的方法如此简单啊,这样就不用进行大数操作了 呵呵;
数论算法如下:


若正整数n可分解为(p1^a1)*(p2^a2)*…*(pk^ak)
其中pi为两两不同的素数,ai为对应指数
n的约数个数为(1+a1)*(1+a2)*….*(1+ak)

做完不禁赞叹到,此法甚妙~定要掌握之 呵呵

#include<iostream>
#include
<cmath>
#include
<algorithm>
using namespace std;


int a[10001];

int main ()
{

    
int n;
    
int i;
    
int j;
    
for(i=1;i<=10;i++)
    
{

        scanf(
"%d",&n);
        
for(j=2;;j++)
        
{

            
while(n%j==0&&n!=1)
            
{
                a[j]
++;
                n
/=j;
            }

            
if(n==1)
                
break;
        }




    }

    
int result=1;
    
for(i=2;i<=10000;i++)
    
{

        
if(a[i]!=0)
        
{

            result
=result*(a[i]+1);
        }

    }

    printf(
"%d\n",result%10);
    system(
"pause");
    
return 0;

}


 


posted @ 2009-03-07 00:36 abilitytao 阅读(1147) | 评论 (1)编辑 收藏

POJ 3458-Colour Sequence 水题-类brute force算法

今天晚上都是水题,直接上代码吧;

#include<iostream>
#include
<cmath>
#include
<cstring>
#include
<algorithm>
using namespace std;

char up[2000];
char down[2000];
char origin[2000];


int main ()
{

    
int n;
    
int i;
    
int pos1;
    
int pos2;
    scanf(
"%d",&n);
    
for(i=1;i<=n;i++)
    
{

        scanf(
"%s%s%s",origin,up,down);
        pos1
=0;
        pos2
=0;
        
int len=strlen(up);
        
while(1)

        
{
            
if(up[pos2]=='*'||down[pos2]=='*')
            
{
                pos2
++;
                pos1
++;
    
            }

            
else if(origin[pos1]==up[pos2]||origin[pos1]==down[pos2])
            
{
                pos2
++;
                pos1
++;
            }

            
else 
                pos2
++;

            
if(pos1==strlen(origin))
            
{
                printf(
"win\n");
                
break;
            }

            
if(pos2>len)
            
{
                printf(
"lose\n");
                
break;
            }

            
        }

    }

    system(
"pause");
    
return 0;
}

posted @ 2009-03-06 23:06 abilitytao 阅读(925) | 评论 (0)编辑 收藏

POJ 3425-Customer support 水题

根据题目直接做就好了,没什么要说的,一次AC;
//This is the Source Code for POJ 3425
#include<iostream>
#include
<cmath>
#include
<cstring>
using namespace std;

int f[1000001];
int main ()
{

    
int n;
    
int a,b,c;
    
int sum=0;
    
int i;
    
while(scanf("%d",&n)!=EOF)
    
{
        memset(f,
0,sizeof(f));
        sum
=0;
        
for(i=1;i<=n;i++)
        
{
            scanf(
"%d%d%d",&a,&b,&c);
            
if(b==0)
            
{
                sum
+=10;
                
continue;
            }

            
else if(b==1&&c==0)
            
{
                
if(f[a]==0)
                
{
                    sum
+=20;
                    f[a]
=1;
                }


                
else if(f[a]==1)
                
{
                    sum
+=30;


                }

            }

            
else if(b==1&&c==1)
            
{
                
if(f[a]==0)
                
{
                    sum
+=40;
                    f[a]
=1;
                }

                
                
else if(f[a]==1)
                
{
                    sum
+=50;
                    
                    
                }

            }

        }

        printf(
"%d\n",sum);
    }

    
return 0;
}

posted @ 2009-03-06 22:03 abilitytao 阅读(773) | 评论 (0)编辑 收藏

POJ 3488-Arne Saknussemm 又一道密码题,模拟

密码题真的很有意思啊,不过现在做的还算简单题吧,以后有空要做做RSA公钥算法...
这个题就是简单模拟一下,值得注意的一点是判断'\'的时候,要用'\\',因为计算机把它当作转义字符来处理的 呵呵 开始我还以为我的编译器出问题了呢。

#include <iostream>
#include 
<cmath>
#include 
<cstring>
#include 
<cstdio>
#include 
<algorithm>

using namespace std;

char matrix[1000][1000];
char line[2000];

int main ()
{

    
int n;
    
int i,j;
    
int len;
    
int pos=0;
    
while(cin>>n)
    
{

        pos
=0;
        
for(i=0;i<n;i++)
            cin
>>matrix[i];
        len
=strlen(matrix[0]);
        
int flag=0;
        
for(j=0;j<len;j++)
        
{

            
for(i=0;i<n;i++)
            
{
                
if(matrix[i][j]!='_')
                    flag
=1;

                
if(flag==1)

                
{
                    line[pos]
=matrix[i][j];
                    pos
++;
                }

            }


        }

        line[pos]
='\0';
        reverse(line,line
+pos);
        
for(i=0;i<pos;i++)
        
{

            
if(line[i]=='_')
            
{
                printf(
" ");
                line[i]
=' ';
                
continue;
            }

            
else if(line[i]=='\\')
            
{
                cout
<<'\n';
                
continue;
            }

            
else 
                cout
<<line[i];
        }

        cout
<<endl<<endl;
    }

    
return 0;
}

posted @ 2009-03-06 21:39 abilitytao 阅读(816) | 评论 (0)编辑 收藏

POJ 3051-Satellite Photographs 图论(深度优先搜索DFS)

这道题和3620基本上是一样的,记得当是我做3620的时候,收获真是大啊,不过现在只能用水题来形容这道3051了,呵呵。
要让更多的题目成为水题,这也是我的目标;

#include<iostream>
#include
<cmath>
#include
<cstdio>
using namespace std;

char input[2000][2000];
int val[2000][2000];
int num;


void dfs(int x,int y)
{

    
if(val[x][y]==0)
        
return;
    
else if(val[x][y]==1)
    
{
        val[x][y]
=0;
        num
++;
        dfs(x,y
+1);
        dfs(x
+1,y);
        dfs(x,y
-1);
        dfs(x
-1,y);

    }

    

}




int main ()
{
    
int w,h;
    
int i,j;
    
char temp;
    
int max=0;
    num
=0;
    scanf(
"%d%d",&w,&h);
    cin.ignore();
    
for(i=1;i<=h;i++)
    
{

        
for(j=1;j<=w;j++)
        
{

            cin
>>temp;
            
if(temp=='*')
                val[i][j]
=1;
            
else
                val[i][j]
=0;
        }

    }

    
for(i=1;i<=h;i++)

    
{
        
for(j=1;j<=w;j++)
        
{
            num
=0;

            dfs(i,j);
            
if(num>max)
                max
=num;

        }

    }

    printf(
"%d\n",max);

    

return 0;
}

posted @ 2009-03-06 20:17 abilitytao 阅读(1085) | 评论 (0)编辑 收藏

POJ 3536-Beer Refrigerator 水题,暴搜

刚开始想过用暴搜的,但是有点担心会超时,一直还以为有什么数学上的方法呢;可是....

#include<iostream>
#include
<algorithm>
#include
<cstdio>
#include
<cmath>
using namespace std;


int main ()
{

    
int min;
    
int n;
    
int i,j,k;
    
int mi,mj,mk;
    
while(scanf("%d",&n)!=EOF)
    
{
        min
=1000000000;
        
for(i=1;i<=sqrt((double)n)+1;i++)
        
{

            
if(n%i==0)
            
{

                
for(j=1;j<=n/i;j++)
                
{

                    
if(n%(i*j)==0)
                    
{
                        k
=n/(i*j);

                        
if(i*j+i*k+j*k<min)
                        
{
                            min
=i*j+i*k+j*k;
                            mi
=i;mj=j;mk=k;
                        }

                    }

                }

            }

        }

        printf(
"%d %d %d",mi,mj,mk);

    }

    
return 0;
}




    


 

posted @ 2009-03-06 19:31 abilitytao 阅读(467) | 评论 (0)编辑 收藏

POJ 3543-iChess 水题

     摘要:   阅读全文

posted @ 2009-03-06 10:51 abilitytao 阅读(319) | 评论 (0)编辑 收藏

POJ-1002 487-3279——字符的映射和串匹配问题

     摘要: 题目大意:这道题是中文的,题意就略了吧;我的思路是:先把字符串里面的-过滤掉,然后再用转换函数,将字符映射到响应的数字,然后排序,记录,输出结果;开始我本来打算用map容器来做这个题的,可是discuss里面说这个方法容易超时,所以最后还是选用了if语句,虽然长一点但是保证效率,呵呵;心得嘛,我发现百度上写的那篇关于sscanf用法的文章有误,我在这里给它修正一下,那里提到过周星星同学的用法,里面...  阅读全文

posted @ 2009-03-05 13:10 abilitytao 阅读(2354) | 评论 (6)编辑 收藏

仅列出标题
共42页: First 34 35 36 37 38 39 40 41 42