TC-Practice-Record

Posted on 2009-12-26 17:28 rikisand 阅读(167) 评论(0)  编辑 收藏 引用 所属分类: TopcoderC/C++Algorithm

tchs-1 none 1000pt DFS 利用进入的方向划分四个边

tchs-2 250pt 直接算就行 我写了2分 500pt 暴力可以过,但是判断时候不能用stringstream 用算术判断 也可以用构造法 1000pt 每一位有三种可能性

           不用,保持不动,变化,分别递归计算value并更新结果即可,由于递归深度最多只有13层所以不会tle

           另外也可以写出基数为3的循环来遍历每一种情况具体看代码

    for(i=0,A[0]++;A[i]>2;i++){
       A[i]=0;A[i+1]++;
  }

tchs-3 1000pt 要想使乘积最大,需要更多的3即可 500pt 又看错题了 ~~~ft 要注意题目一定要看清楚

tchs-4 500pt 模拟题,好难懂 音乐的~ 可以都乘以16 用整数来计算 浮点会很烦~ 这种题思路要清晰 一步一步来

tchs-5 250pt 简单题,注意使用double 可以用1.0*int就不用double()了还有 int(h+1e-9);

          500pt 简单题,把所有word提取出来然后排序,再依次插入标点即可,注意有些小技巧

Code Snippet
     string wordSort(string s)
      {
            vector<string> SA,SB;
            string A="",B="";
            for(int i=0;i<s.size();i++)
                if(s[i]>='A'&&s[i]<='Z'||(s[i]<='z'&&s[i]>='a')){
                    if(B!=""){
                      SB.push_back(B);B="";
                    }
                    A+=s[i];
                }
                else{
                    if(A!=""){
                      SA.push_back(A);A="";
                    }
                    B+=s[i];
                }
            if(A!="")SA.push_back(A);if(B!="")SB.push_back(B);
            sort(SA.begin(),SA.end());string res="";
            int i=0;
            for(; i<SA.size()&&i<SB.size();i++)
                if(s[0]>='A'&&s[0]<='Z'||(s[0]<='z'&&s[0]>='a'))
                    res=res+SA[i]+SB[i];
                else
                    res=res+SB[i]+SA[i];
            for(;i<SA.size();i++)res+=SA[i];
            for(;i<SB.size();i++)res+=SB[i];
            return res;
      }

思路要清晰,两个轮替记录即可

                1000pt    显然的BFS 利用队列 只是题意不太好理解,最好把判断写成小函数,主程序会看起来比较清晰,不容易出错~ 一步一步来


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理