Coding issue

最近犯的编程错误

  1. 一道扫描二维矩阵one row(4个方向最长的同色有多长),以下是错误代码 GCJ2010(Round1A ProA)

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

     int ii=i, jj=j;
     char cur=str[i][j];
     if(cur=='.') continue;
     int rowc=1, colc=1, first=1, second=1;
     for(int k=0;k<8;k++)
     {
         int cnt=0;
         while(inrange(ii+dx[k], jj+dy[k]) && str[ii+dx[k]][jj+dy[k]]==cur) ii+=dx[k], jj+=dy[k], cnt++;
         if(k<2) rowc+=cnt;
         else if(k<4) colc+=cnt;
         else if(k<6) first+=cnt;
         else second+=cnt;
     }
     if(rowc>=K || colc>=K ||first>=K || second>=K)
     {
         //cout<<i<<" "<<j<<" "<<rowc<<" "<<colc<<" "<<first<<" "<<second<<endl;
         if(cur=='R') r=1;
         else if(cur=='B') b=1;
     }
    

    }

一直出错,找不到问题,最后还是debug才发现ii=i, jj=j, 这两句应该放到for(k=0->8)循环里面,因为每个方向初始化都要一次
2.CF296Div2ProB
这题是一个编程题,关键是设计数据结构,我没想清楚,然后一开始以为要hash存每个si ti的位置的map,然后又改成vector map[26], 类似这种
后来想清楚,其实对于一种字符map只要存任意一个位置就可以,答案是一样的,因此可以onepass扫描,但是交的代码只看了ump[si], 而忽略了mp[ti]
的情况,例如这种
c b
e c
也就说对于swap减一的情况没有想清楚还要判ump[ti], 只是粗略举例子说swap-2的时候mp[si]就可以了

3.第一道题目反应了很久,本来是一直减,后来发现超时
然后改成递归发现爆栈,后来改循环,发现其实就是辗转相除的运用。结果最后发现有一个分支没有return

LL f(LL a, LL b)
{
    if(a<b) return f(b, a);
    LL ans=0;
    while(a>1 && b>1 && a!=b)
    {
        ans+=(a/b);
        a%=b;
        if(a<b) swap(a, b);
    }
    if(a==b) return ans+1;
    else if(a==1) return ans+b;
    else if(b==1) return ans+a;
    return ans;
}

b

Posted by richard爱闹 - 3月 18 2015
如需转载,请注明: 本文来自 Richard