东南大学2004年程序设计第一届决赛解题报告
2007-03-06 22:10 老博客哈 阅读(1000) 评论(2) 收藏 举报                                           东南大学第一届程序设计竞赛决赛解题报告
                                                                                                  农夫三拳@seu
                                                                                                  drizzlecrj@gmail.com
    “善始者实繁,克终者盖寡”,既然初赛解题报告贴出来了,为了不做“寡人”,偶痛下心来做了一下决赛。决赛的题目相对初赛题量进行了减少 ,难度略有增加。为了大家能力的提高,这次就不传solution了。(里面有两题目前为止还没有找到Oj提交)
    第一题 Simple Multiplication
    高精度乘法,模拟手工计算时的即可。
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1001 即为一题稍微复杂点的高精度乘法的问题
    第二题 How Many Triangles
    找递归规律。通过枚举前几个三角形可以发现每一个边长为n(n > 3)的三角形都可以由3个n-1个三角形组成,
    而这种情况下需要除去重叠的部分,还要加上漏掉的部分。由于在偶数边长的情况下会存在一个边长为n / 2倒三角形。因此递归式为
  C[n] = 3*C[n - 1] - 3*C[n - 2] + C[n - 3] + 2 , n为偶数
  C[n] = 3*C[n - 1] - 3*C[n - 2] + C[n - 3] + 1 , n为奇数
  可以在http://acm.hdu.edu.cn/showproblem.php?pid=1396进行提交
    第三题 BST Reconstruction
                题意很简单。我是模拟做的,按照输入序列从后往前的构建BST(Binary Search Tree),然后进行PreOrder输出应该有更好办法
    第四题      Palindrome Numbers
                这题看起来简单,其实花了我不少时间,规律很容易发现,从1位数目的数字,到2位,3位。。。所有回文数的个   数为9, 9, 90, 90, 900, 900, ... ...
  知道这个规律也并非一定能很容易的做出来。事实上使用构造是无可厚非的,关键点要注意回文的第一个数字和其它的数字并相同。此外,从题目的数据量2*10^9可以推算出,回文的“一半”在int范围之内,这就给你不用字符串提供了一些机会。写出短小精悍的程序我是没能做到(-_-),下面是某大牛的一段代码:
  
 #include<stdio.h>
#include<stdio.h> int main()
  int main() {
  { int i,j,n;
          int i,j,n; scanf("%d",&n);
          scanf("%d",&n); while (n)
          while (n) {
          { i=9;
                  i=9; j=1;
                  j=1; while (n-2*i>0)
                  while (n-2*i>0) {
                  { n-=2*i;
                          n-=2*i; i*=10;
                          i*=10; j*=10;
                          j*=10; }
                  } j+=((n%i==0) ? i:n%i)-1;
                  j+=((n%i==0) ? i:n%i)-1; printf("%d",j);
                  printf("%d",j); if (n-i<=0)
                  if (n-i<=0) j/=10;
                          j/=10; while (j)
                  while (j) {
                  { printf("%d",j%10);
                          printf("%d",j%10); j/=10;
                          j/=10; }
                  } printf("\n");
                  printf("\n"); scanf("%d",&n);
                  scanf("%d",&n); }
          } return 0;
          return 0; }
  }
    第五题      Possible Weights
  数据量比较小,用n^2的dp就可以搞定了。
试题下载
 
                    
                     
                    
                 
                    
                 
  
 
           
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号