zoj 1003

最近也没什么时间写,写了这个,然后发现原来的算法不对,然后上网看了看,大家是用dfs实现的,突然感觉到不能耍小聪明啊,得先老老实实得练习基础啊。
ps:对于while(cin>>a>>b)这个语句的语法啊,一开始没太在意,只认为是一个输入,让我time limited了N次。最后才发现这个能让循环退出啊,什么鬼,果然还是too young too naive啊,果然C++还是不太熟,得多复习复习了

#include<iostream>
using namespace std;
int a,b;
bool flagb,flag;//flag表示找到,flagb表示b整除
void dfs(int a,int b,int k)
{
    if(k==101)return;
    if(a==1&&b==1)flag=1;
        else if(b==1) flagb=1;
    if(flag==1||(k>a&&k>b)) return;
    if(a%(k+1)==0)dfs(a/(k+1),b,k+1);
        if(b%(k+1)==0)dfs(a,b/(k+1),k+1);
        dfs(a,b,k+1);
    }

    int main()
    {
    while(cin>>a>>b)
    {   
            if(a<b){
            int c=a;
            a=b;
                b=c;
        }
        flagb=flag=0;
            dfs(a,b,1);
            if(flag==1||flagb==0)
                cout<<a<<endl;
            else
                cout<<b<<endl;  
    }
        system("pause");
        return 0;
    }
  1. 最短路(Floyd、Dijstra,BellmanFord)
    2.最小生成树(先写个prim,kruscal要用并查集,不好写)
    3.大数(高精度)加减乘除
    4.二分查找. (代码可在五行以内)
    5.叉乘、判线段相交、然后写个凸包.
    6.BFS、DFS,同时熟练hash表(要熟,要灵活,代码要简)
    7.数学上的有:辗转相除(两行内),线段交点、多角形面积公式.
  2. 调用系统的qsort, 技巧很多,慢慢掌握.
  3. 任意进制间的转换
    据说这些都是些基础,得敲上个十几遍,虽然一点感觉都没有,但这做个记录吧,分享分享
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值